Rails:仅针对一个对象进行fields_for

4
我在我的Rails应用程序中有一个名为Product的模型,它的属性可以被编辑,我想让用户评论他所做的每一个更改(评论可以为空)。因此,Product has_many:comments,它接受嵌套的comment属性并在评论为空时拒绝它。

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

  1. Fields_for助手为产品所属的所有评论呈现文本区域,因此用户可以编辑所有先前的评论。我需要它仅为新的评论呈现字段。
  2. 如果验证失败,并且没有评论,fields_for将不会呈现任何内容。我应该在视图中在fields_for语句之前每次执行@product.comments.build,还是有更优雅的方法?

也许我错了,fields_for在这种情况下不适用?

2个回答

10

基于Tots的回答,我将其简化了一下(适用于Rails 3):

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

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接