8

在RoR 3中,我只想要一個鏈接/按鈕來激活控制器中的某些動作/方法。具體來說,如果我點擊頁面上的'update_specs'鏈接,它應該轉到我的產品控制器中的'update_specs'方法。我發現建議,要做到這一點上這個網站:Rails 3鏈接或按鈕,在控制器中執行動作

link_to "Update Specs", :controller => :products, :action => :update_specs 

不過,我得到以下路由錯誤,當我點擊此鏈接:

路由錯誤的路由匹配{:動作=> 「update_specs」, :控制器=>「產品」}

我已經閱讀了關於路由,但我不明白爲什麼我應該有路由這種方法,如果所有其他方法通過訪問這些資源:產品。

+0

您需要路由此方法,因爲您的操作無法通過使用'resources'生成器生成的標準REST路由訪問。 – MBO

回答

14

您需要爲其創建路線。

例如:

resources :products do 
    put :update_specs, :on => :collection 
end 

此外,默認情況link_to將查找在你的路由的GET方法。如果你想處理一個POSTPUT方法,你需要通過添加{:method => :post }{:method => :put }作爲參數,如指定它:

link_to "Update Specs", {:controller => :products, :action => :update_specs}, {:method => :put } 

或者你可以使用button_to代替link_to它默認處理POST方法。