2010-11-27 10 views
2

単一のアクション内に新しいActiveRecordモデルオブジェクトの階層を作成して関連付けを持たせることができますか?これは単なる別のビットで実行する必要がありますか?単一のアクション内で新しいActiveRecordモデルオブジェクトの階層を作成する好ましい方法

has_manyコメントのブログ投稿モデルの例を考えてみましょう。私は、ブログ投稿のための同じフォーム内の最初のコメントを追加するブログ投稿の作成者のサポートを追加します。今、私がやっていることは、コメントがあるかどうかをチェックするブログ投稿のafter_create呼び出しがあり、ブログ投稿があればコメントを作成することです。

まだ保存されていないので、まだ保存されていないのでブログの投稿には実際にはIDがないので、保存されていないブログ投稿でコメントを作成(ビルド)することは考えていました。私は、他の人がどのようなアプローチをとっているかを知ることに興味があります。

答えて

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 %> 
関連する問題