2012-09-01 19 views
0

我做了一些表格,並試圖作出一個嵌套形式方式:Rails的嵌套形式:f.input和輸入(F)的區別

<%= form_for(@birth) do |f| %> 
    <%= f.text_area(:obs) %> 
    <%= f.fields_for :child_attributes do |ff| %> 
     <%= text_field(:child_attributes, :earring) %> 
    <% end %> 
<% end %> 

然後,在BirthsController,我可以得到嵌套的屬性,這些屬性方法:

child = params[:child_attributes] 

但是,如果我改變我的嵌套形式:

<%= form_for(@birth) do |f| %> 
    <%= f.text_area(:obs) %> 
    <%= f.fields_for :child_attributes do |ff| %> 
     <%= ff.text_field(:earring) %> 
    <% end %> 
<% end %> 

它不工作。 他們之間的差別究竟是什麼,爲什麼第二種方式(我認爲更優雅)不起作用?

感謝

回答

1

text_field方法知道也不關心你的對象@birth,所以字段的名稱也只是child_attributes,這就是爲什麼你可以通過params[:child_attributes]訪問它,但是這不是你想要的。您可以使用ff.text_field。然後在您的Birth型號中,添加:

accepts_nested_attributes_for :child_attributes 
attr_accessible :child_attributes_attributes 
+0

就是這樣,謝謝!只有一件事:attr_accessible:child_attributes沒有最後的「_attributes」:) – caarlos0

+0

你確定嗎?我認爲你需要最後的屬性。例如,如果你有'has_many:media'和'f.fields_for:media ...',那麼你需要有'attr_accessible:media_attributes'。所以我不明白爲什麼你的關聯被命名爲「* _attributes」的事實會改變... – Robin

+0

是的......但你的例子是'attr_accessible:child_attributes_attributes',我使用'attr_accessible:child_attributes',它工作的很好....我只是改變了我在我的控制器中的值的方式,我使用'params [:birth] [:child_attributes]'... – caarlos0