2013-04-24 81 views
6

嘗試過論壇,文檔和博客建議。它們聚合在語法上,對我來說,它並不能正確保存並通過想要的控制器進行路由。將Rails form_for路由到自定義控制器的語法

大圖,我有兩個共享功能的軟件應用程序。爲了實現共享功能,我讓Rails生成Shared :: Widgets。這MVC工作得很好。查看,更新,創建或刪除使用標準的共享/小部件&等路由沒有問題。

然後,爲了產品特定的功能,我創建了兩個控制器:Product1 :: Widgets和Product2 :: Widgets。兩者都從Shared :: Widgets控制器繼承。除特定於產品的佈局外,兩者都是空的。

該方案几乎可行。當我路由到product1 /小部件時,它將layout設置爲product1並調用shared/widgets的索引方法。結果是使用product1佈局顯示shared/widgets/index.html.erb。同樣,當我路由到product2 /小部件時,它將設置product2佈局並調用共享/小部件的索引方法。結果是使用product2佈局顯示shared/widgets/index.html.erb。完善。

但是現在我們到了form_for。因爲它實現了軌道魔法,所以它確實想要直接路由到Shared :: Widgets控制器。但那不是我想要的。我希望它路由到適當的產品控制器以設置佈局。軌道生成的form_for是這樣的:

form_for(@shared_widget, :html => { :class => "form"}) do |f| 

我想:

form_for([:product1, @widget], :html => { :class => "form"}) do |f| 

但複製命名空間(product1_widget_shared_widget_path)。

我嘗試以下三種格式,所有這些似乎正確的路線,並保存記錄,但記錄爲空(列是空白):

form_for(@widget, url => "product1/widget", :html => { :class => "form"}) do |f| 

form_for(@widget, url => url_for(:controller => "widget"), :html => { :class => "form"}) do |f| 

form_for(@widget, url => url_for(:controller => "widget", :action => "create"), :html => { :class => "form"}) do |f| 

任何幫助嗎?如果上面的代碼有拼寫錯誤,那是由於轉錄。我使用的實際代碼通過了解釋器。謝謝。

回答

2

試試這個

form_for(url: { controller: "posts", action: "create" }, html => { :class => "form" }, method: "post") do |f|