Rails: fields_for только для одного объекта - PullRequest
4 голосов
/ 02 августа 2010

У меня есть модель Product в моем приложении на Rails, его атрибуты можно редактировать, и я хочу, чтобы пользователь комментировал каждое изменение, которое он вносит (хотя комментарий может быть пустым). Итак, Product has_many: comments, он принимает_nested_attributes_for: comments и отклоняет его, если комментарий пуст.

Следовательно, форма редактирования для продукта является многомодельной формой. Проблемы, с которыми я столкнулся:

  1. Fields_for помощник отображает текстовые области для всех комментариев, принадлежащих продукту, поэтому пользователь может редактировать все предыдущие комментарии. Мне нужно, чтобы отображать поля только для нового.
  2. Если проверка нарушается и нет комментариев, fields_for ничего не рендерит. Должен ли я каждый раз выполнять @ product.comments.build в представлении перед оператором fields_for, или есть более элегантный способ сделать это?

Может быть, я ошибаюсь и fields_for не подходит в этой ситуации?

Ответы [ 2 ]

9 голосов
/ 24 октября 2011

Ответ на основе Tots Я просто сделал это немного проще (совместим с Rails 3):

<%= f.fields_for :comments, @product.comments.build do |comment| %>
    <%= comment.label :comments %><br />
    <%= comment.text_area :content %>
<% end %>
0 голосов
/ 31 августа 2010
<% f.fields_for(:comments, Product.reflect_on_association(:comments).klass.new) 
    do |builder| %>

    <%= builder.label :comment %>
    <%= builder.text_area :comment, :rows => 3 %>
<% end %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...