2011-10-19 109 views
0

我有以下的代碼塊,我試圖以適應某些產生腳手架修改路徑的URL助手?

= form_for(@event, :url => group_event_path(@event.group_id, @event)) do |f| 

正如你所看到的,我定義看起來像這樣

resources :groups do 
    resources :events 
end 
嵌套資源路線

現在回到上面的form_for行。默認的Rails腳手架使用類似於上面的代碼來生成_form,它在#new和#edit中使用。這給我的問題是,擁有的form_for提交這兩條路徑

  • 創建:group_events_path(@ event.group_id)
  • UPDATE:group_event_path(@ event.group_id,@event)

有沒有一種方法可以讓我通過修改group_event(s)_path幫助程序的工作方式來簡化此操作?

回答

0

如果使用多態form_for語法,這將解決它:

= form_for([@group, @event]) do |f| 

現在如果@event對象持久化到數據庫,然後它會使用update路線,如果它不是那麼它將使用create路線。

你可以做同樣的事情,與正常form_for電話:

= form_for(@event) do |f| 

絕對沒有理由指定其他的:url選擇,而不是自定義URL是不同的Rails什麼東西推斷。

+0

第一種方法出現在我身上,但對於這一行來說,做第二次數據庫查找看起來有些過火。我想這是過早的優化。理想情況下,我想通過查看'@ event.group_id'來映射第二種方法來構建路徑,當它爲零時拋出異常 –