2011-08-19 43 views
0

我有一個模型,只有編輯/更新操作邏輯上分爲兩種形式。模型是Venue。我創建了app/controllers/venues_controller.rb。這兩個子表單是細節和策略,所以我創建了app/controllers/venues/details_controller.rb和app/controllers/venues/policies_controller.rb,以及相應的視圖。子控制器繼承自VenuesController。我加入了場館的命名空間我的路線,所以它現在看起來像: 資源:場館 命名空間:場地做 :細節:政策 結束Ruby on Rails,拆分模型到兩個控制器/窗體,但更新動作調用父

的路由正常工作,正確的意見負載時,「編輯」正確調用子控制器上的操作。然而,在子視圖中,我使用的是REST風格的form_for(@venue),所以當表單被POST(PUT)時,它會去venue_path,而不是venue_details_path。

我查看了form_for的文檔,並找不到一種方法來保持我的子表單的安寧。您可以爲form_for([:namespace,@model])的名稱空間添加一個標記,但在我的情況下,模型名稱是名稱空間,因此它是相反的。

我真的不想分裂模型本身,因爲這有其他的影響,將更難解決。

到目前爲止,我看到了兩個解決方案,這兩個我不喜歡: 1.讓兩種觀點POST到VenuesController#更新和處理有什麼不同(更瘸控制器代碼) 2.使用的form_tag和_tag helpers(更多無聊查看代碼)

我是否缺少明顯的東西?有什麼不同的,我可以做的路線,還是有另一種方式來調用form_for?

我掃描了一些關於Presenter和Conductor模式的帖子,但他們似乎不適合這個問題。我讀過幾個關於是否爲一個模型koscher創建兩個控制器的stackoverflow線程,但沒有提到這個特定的問題。

回答

0

啊,找到它了。 form_for(@venue,:url => venues_detail_path(@venue))。愛上Rails。

相關問題