Предпочтительный способ создания иерархии новых объектов модели ActiveRecord в рамках одного действия - PullRequest
2 голосов
/ 27 ноября 2010

Есть ли предпочтительный способ создания иерархии новых объектов модели ActiveRecord с ассоциациями (например, создание модели, которая имеет дочерних элементов has_many) в рамках одного действия?Это просто что-то, что должно быть сделано отдельными блоками?

Возьмите пример модели поста в блоге, который имеет комментарии комментариев has_many.Я добавляю поддержку автору блога, добавляя начальный комментарий в той же форме для блога.Прямо сейчас я делаю вызов after_create в посте блога, который проверяет, есть ли комментарий, и пост блога создает комментарий, если он существует.

Я думал просто о сборке (.build) комментарий с несохраненным сообщением в блоге, но, по-видимому, это не работает, поскольку сообщение в блоге на самом деле еще не имеет идентификатора, поскольку оно еще не было сохранено.Я заинтересован в том, чтобы узнать, какие подходы используют другие люди.

1 Ответ

3 голосов
/ 27 ноября 2010

Я предпочитаю вложенные модели моделей.

Модели:

class Comment < ActiveRecord::Base
  belongs_to :post
end

class Post < ActiveRecord::Base
  has_many :comments, :dependent => :destroy
  accepts_nested_attributes_for :comments
end

Контроллер:

@post = post.new
@post.comments.build

Вид:

<% form_for @post do |f| %>  
  <%= f.error_messages %>  
  <p>  
    <%= f.label :title %><br />  
    <%= f.text_field :title %>  
  </p>  
  <% f.fields_for :comments do |builder| %>  
  <p>  
    <%= builder.label :content, "Comment" %><br />  
    <%= builder.text_area :content, :rows => 5 %>  
  </p>  
  <% end %>  
  <p><%= f.submit "Submit" %></p>  
<% end %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...