2012-04-24 83 views
1

我正在Ruby-On-Rails上開發一個小應用程序。我想從視圖中調用控制器的方法。該方法只會在數據庫表中執行一些插入操作。什麼是正確的方法來做到這一點?我已經試過這樣的事情,但顯然不執行方法代碼:如何從視圖調用控制器的方法?

<%= link_to 'Join', method: join_event %> 

回答

5

中的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 
+0

非常感謝您的回覆。這非常有幫助:)如果我希望按鈕顯示錶單並基於表單字段在數據庫中執行插入操作,我該怎麼辦? – notGeek 2012-04-25 18:16:35

+0

如果您想接受用戶輸入,則需要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

4

除了agmcleod的回答,您可以公開的控制器方法與ActionController::Base::helper_method的觀點:

class EventsController < ApplicationController 
    helper_method :join_event 

    def join_event(event) 
    # ... 
    end 
end 

但在這種情況下,我想你最好按照他的建議,並提出這個方法的模型層,因爲它的INTE與數據庫發生衝突。

+0

你真的不應該這樣做。雖然你可以或多或少的理想,讓控制器知道它的方法,而沒有其他的:) – agmcleod 2012-04-26 02:49:54

+2

@agmcleod我不同意。取決於會話數據的'logged_in?'控制器方法在視圖層中非常有用。與大多數事情一樣,您只需知道何時使用它以及何時濫用它:-) – Brandan 2012-04-26 12:53:07

相關問題