2010-03-18 139 views
2

我想創建一個嵌套資源的窗體。下面是我的路線:什麼是嵌套資源的form_for語法?

map.resources :websites do |website| 
    website.resources :domains 
end 

這裏是我的嘗試和錯誤:

<% form_for(@domain, :url => website_domains_path(@website)) do | form | %> 
<%= form.text_field :name %> 

# ArgumentError: wrong number of arguments (1 for 0) 
# form_helper.rb:290:in 'respond_to?' 
# form_helper.rb:290:in 'apply_form_for_options!' 
# form_helper.rb:277:in 'form_for' 

<% form_for([@website, @domain]) do | form | %> 
<%= form.text_field :name %> 

# ArgumentError: wrong number of arguments (1 for 0) 
# form_helper.rb:290:in 'respond_to?' 
# form_helper.rb:290:in 'apply_form_for_options!' 
# form_helper.rb:277:in 'form_for' 

<% form_for(:domain, @domain, :url => website_domains_path(@website)) do | form | %> 
<%= form.text_field :name %> 

# ArgumentError: wrong number of arguments (1 for 0) 
# wrapper.rb:14:in 'respond_to?' 
# wrapper.rb:14:in 'wrap' 
# active_record_helper.rb:174:in 'error_messages_for' 

<% form_for(:domain, [@website, @domain]) do | form | %> 
<%= form.text_field :name %> 

# UndefinedMethodError 'name' for #<Array:0x40fa498> 

我已經證實了正確的類都@website@domain包含實例。

也正確地產生的路線是這樣的例如,所以我不認爲他們是與路由或網址助手的問題。

<%= website_domains_path(1) %> 
<%= website_data_source_path(1, 1) %> 

的Rails 2.3.5

回答

1

您可以使用

<%= form_for [@website, @domain] %> 

@domain屬於@website

+0

儘管我的問題的解決方案是對問題的正確答案,但我更願意將點數獎給別人以外的人! – Kris 2010-03-31 11:07:01

+0

'for_for' - >'form_for'(我無法直接編輯) – static 2013-10-01 08:16:57

1

我只是試着:

<% form_for @note, :url => teams_person_notes_path(@person) do |f| %> 
    <%= f.text_field :note %> 
    <%= f.submit "Add" %> 
<% end %> 

和它的作品沒有任何問題。我的路線如下所示:

map.namespace :teams do |t| 
    t.resources :people do |p| 
     p.resources :notes 
    end 
    end 

因此它與您的一樣(只添加名稱空間,但不是這種情況)。

當然,您的示例表單是針對@domain的新對象。它不會對編輯工作的行動,那麼你應該有:

<% form_for @domain, :url => edit_website_domain_path(@website, @domain) do |form| %> 
+0

這可能是一個比我首先想到的更深的問題。表單示例是針對一個新對象的,即。 @ domain.new_record? #=> true。 – Kris 2010-03-18 14:58:21

+0

我認爲你的第二個例子也應該可以工作,但是對於新的和編輯都是如此。所以可能你在其他地方有錯誤。你是否用'end'關閉了所有的塊?或者,嘗試從表單中刪除所有字段。 – klew 2010-03-18 16:25:02

0

這是如此明顯,當它終於點擊,我有一個域名爲respond_to。當然,它覆蓋了現有的方法。

它是一種恥辱的ActiveRecord並不時發出警告的數據庫列將覆蓋已定義的方法...