0

ネストされたリソースでcrudを構築しています。

Post has_many :commentsと私comments belongs_to :userbelongs_to :post。新しいコメントを追加するとき、現在、コメント コントローラーの作成アクションで次のようなことを行っています。

@post = Post.where(id: params[:post_id]).first
@post_comments = @post.post_comments.build
@post_comments.update_attributes(params[:post_comment])
@post_comments.user = current_user

if @post_comments.save
  ...

この投稿も見ました: https://stackoverflow.com/a/5978113これは、私がしていることをしているようです。

これは途切れ途切れのようで、これを正しく行っているかどうかわかりません。より良い方法はありますか?ベストプラクティスは何ですか?

4

1 に答える 1

2

これについて定義されたベストプラクティスはわかりませんが、あなたのコードでは、への呼び出しは必要ありませんupdate_attributes。両方の外部キーを保存する方法は 2 つあります (ユーザーからコメントを作成する場合は、実際には 4 つの方法があります)。

最初のオプション:

params[:post_comment].merge!(user_id: current_user.id)
@post = Post.where(id: params[:post_id]).first
@post_comment = @post.post_comments.build(params[:post_comment])

if @post_comment.save
  ...
else
  ...
end

2 番目のオプション:

@post = Post.where(id: params[:post_id]).first
@post_comment = @post.post_comments.build(params[:post_comment])
@post_comment.user = current_user

if @post_comment.save
  ...
else
  ...
end

ただし、単数形のリソースを扱う場合は、単数形を使用する必要があり@post_commentsます。@post_comment

于 2013-03-31T12:26:48.330 に答える