Rails:fields_for只有一个对象

时间:2010-08-02 16:44:28

标签: ruby-on-rails

我的Rails应用程序中有一个模型产品,其属性可以编辑,我想让用户评论他所做的每一个更改(评论可以是空白的)。所以,Product has_many:comments,它accepted_nested_attributes_for:注释并在评论为空白时拒绝它。

因此,Product的编辑表单是一个多模型表单。我遇到的问题是:

  1. Fields_for帮助程序呈现属于产品的所有评论的文本区域,因此用户可以编辑之前的所有评论。我需要它来为新的字段渲染字段。
  2. 如果验证中断,并且没有注释,则fields_for不会呈现任何内容。我应该每次在fields_for语句之前的视图中执行@ product.comments.build,还是有更优雅的方式来执行此操作?
  3. 也许我错了,在这种情况下fields_for不合适?

2 个答案:

答案 0 :(得分:9)

基于Tots答案我只是简单一点(Rails 3兼容):

<%= f.fields_for :comments, @product.comments.build do |comment| %>
    <%= comment.label :comments %><br />
    <%= comment.text_area :content %>
<% end %>

答案 1 :(得分:0)

<% f.fields_for(:comments, Product.reflect_on_association(:comments).klass.new) 
    do |builder| %>

    <%= builder.label :comment %>
    <%= builder.text_area :comment, :rows => 3 %>
<% end %>