我正在Ruby-On-Rails上開發一個小應用程序。我想從視圖中調用控制器的方法。該方法只會在數據庫表中執行一些插入操作。什麼是正確的方法來做到這一點?我已經試過這樣的事情,但顯然不執行方法代碼:如何從視圖調用控制器的方法?
<%= link_to 'Join', method: join_event %>
我正在Ruby-On-Rails上開發一個小應用程序。我想從視圖中調用控制器的方法。該方法只會在數據庫表中執行一些插入操作。什麼是正確的方法來做到這一點?我已經試過這樣的事情,但顯然不執行方法代碼:如何從視圖調用控制器的方法?
<%= link_to 'Join', method: join_event %>
中的link_to方法調用該方法的選擇實際上是HTTP方法,而不是動作的名稱。這對於傳遞HTTP刪除選項很有用,因爲RESTful路由使用DELETE方法來執行destroy操作。
你需要在這裏做什麼,爲你的行動設置一個路線。假設它被稱爲join_event
,以下內容添加到您的routes.rb:
match '/join_event' => 'controllername#join_event', :as => 'join_event'
一定要改變controllername您所使用的控制器的名稱。然後更新您的視圖,如下所示:
<%= link_to 'Join', join_event_path %>
_path方法是基於路徑文件中的as值生成的。
要組織代碼,您可能希望將插入封裝到靜態模型方法中。所以,如果你有一個名字列叫做MyModel
模型,你可以做
class MyModel
# ...
def self.insert_examples
MyModel.create(:name => "test")
MyModel.create(:name => "test2")
MyModel.create(:name => "test3")
end
end
然後,只需通過在動作執行:
MyModel.insert_examples
除了agmcleod的回答,您可以公開的控制器方法與ActionController::Base::helper_method
的觀點:
class EventsController < ApplicationController
helper_method :join_event
def join_event(event)
# ...
end
end
但在這種情況下,我想你最好按照他的建議,並提出這個方法的模型層,因爲它的INTE與數據庫發生衝突。
非常感謝您的回覆。這非常有幫助:)如果我希望按鈕顯示錶單並基於表單字段在數據庫中執行插入操作,我該怎麼辦? – notGeek 2012-04-25 18:16:35
如果您想接受用戶輸入,則需要a)設置模型,b)爲該模型運行數據庫遷移,以及c)設置控制器和視圖以支持該模型。實際上,我建議您閱讀入門指南:http://guides.rubyonrails.org/getting_started.html#getting-up-and-running-quickly-with-scaffolding,因爲它列出了其中的一些步驟。如果你願意投資一本書,可以看看Rails 3的行動 – agmcleod 2012-04-26 02:52:24