投稿とともにディスカッションを保存および編集する
既存のディスカッション
作成中の投稿を既存のディスカッションに関連付けるには、id を投稿パラメーターにマージするだけです
@post = current_user.posts.build(
params[:post].merge(
:discussion_id => existing_discussion.id
)
@post
関連付けが保存されるように、フォームにディスカッション ID の非表示の入力が必要です。
新しいディスカッション
すべての投稿とともに新しいディスカッションを作成し、フォームを介してその属性を管理する場合は、accepts_nested_attributes
class Post < ActiveRecord::Base
belongs_to :user
belongs_to :discussion
accepts_nested_attributes_for :discussion
end
build_discussion
投稿を作成した後、コントローラーでディスカッションを作成する必要があります
@post.build_discussion
また、フォームには、ディスカッション用のネストされたフィールドを含めることができます
form_for @post do |f|
f.fields_for :discussion do |df|
...etc
これにより、投稿とともにディスカッションが作成されます。ネストされた属性の詳細については、この優れた Railscast をご覧ください
より良い関係
さらに、関連付け:through
のオプションを使用して、より一貫性のあるリレーショナル設定を行うことができます。has_many
class User < ActiveRecord::Base
has_many :posts
has_many :discussions, :through => :posts, :source => :discussion
end
class Discussion < ActiveRecord::Base
has_many :posts
end
class Post < ActiveRecord::Base
belongs_to :user
belongs_to :discussion
end
Post
このように、ディスカッションに対するユーザーの関係は、2 つの場所ではなく、モデル内でのみ維持されます。