2010-12-18 15 views
1

我想在Rails 3.0.3中創建一個嵌套的模型表單。這裏是我的模型:fields_for爲嵌套屬性返回任何東西

class Bird < ActiveRecord::Base 
    has_one :taxon, :as => :organism 
    accepts_nested_attributes_for :taxon 
end 

class Taxon < ActiveRecord::Base 
    belongs_to :organism, :polymorphic => true 
end 

這裏的控制方法:

def new 
    @bird = Bird.new 
    @bird.build_taxon 
end 

而這裏的形式:

New Bird 
<% form_for @bird do |f| %> 
<p> 
    <%= f.label :wingspan %> 
    <%= f.text_field :wingspan %> 
</p> 
<p> 
    <%= f.label :body_length %> 
    <%= f.text_field :body_length %> 
</p> 
<% f.fields_for :taxon do |builder| %> 
    <%= builder.label :common_name %> 
    <%= builder.text_field :common_name %> 
    <%= builder.label :genus_name %> 
    <%= builder.text_field :genus_name %> 
    <%= builder.label :species_name %> 
    <%= builder.text_field :species_name %> 
<% end %> 
<%= f.submit %> 
<% end %> 

當我運行的新方法,用於類羣的字段不出現。 html源代碼中沒有提示。我聽說如果嵌套模型爲零(即,如果我忘記在控制器方法中構建它),則會發生這種情況,但它在那裏。爲了確保,我在視圖中添加了一些條件代碼。

那麼,誰會讓我在這裏拍我的額頭?我錯過了什麼?

謝謝!

回答

8

你使用的是Rails 3嗎?如果是的話應該是:

<%= form_for @bird do |f| %> 

<%= f.fields_for :taxon do |builder| %> 

注意等號。

+0

奇怪的是,在兩個語句中忽略'='都會呈現'Bird'字段,而不是'Taxon'字段,所以'form_for'似乎適用於舊語法,但不適用於'fields_for'(Rails 3 of課程)。 – zetetic 2010-12-19 00:00:01

+0

哎呀,是的,它是那些在fields_for行中缺少的等號。多麼奇怪,它應該是必要的!謝謝! – CharlieMezak 2010-12-19 19:48:59

+0

爲什麼它還沒有渲染的另一個原因是,你沒有打電話給'建立'它是你的控制器中的第一個關聯:新行爲(你可能忽略了)。 – Dominic 2014-03-07 20:02:37