在单个操作中创建新ActiveRecord模型对象层次结构的首选方法

时间:2010-11-27 08:20:34

标签: ruby-on-rails activerecord

是否有一种首选方法可以在单个操作中创建具有关联的新ActiveRecord模型对象的层次结构(例如,创建具有多个孩子的模型)?这只是应该在不同的位中完成的吗?

以博客文章为例,其中包含了很多评论。我添加了对博客文章作者的支持,在博客帖子的同一表单中添加了初始评论。现在,我所做的是在博客文章中有一个after_create调用,用于检查是否有评论,如果文章存在,博客文章会创建评论。

我正在考虑用未保存的博客文章构建(.build)评论,但显然这不起作用,因为博客帖子实际上还没有id,因为它尚未保存。我很想知道其他人采取了什么方法。

1 个答案:

答案 0 :(得分:3)

我更喜欢嵌套的模型表单。

型号:

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 %>