在“创建”中保存多个外键的最佳做法是什么?

时间:2013-03-31 10:01:20

标签: ruby-on-rails-3

我正在用嵌套资源构建一个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这似乎正在做我正在做的事情。

这看起来很不稳定,我不确定我是否正确地这样做了。有没有更好的办法?什么是最佳做法?

1 个答案:

答案 0 :(得分:2)

我不知道有任何已定义的最佳做法,但是使用您的代码,您不需要调用update_attributes。有两种方法可以保存两个外键(实际上有四种方式,如果你要用来构建用户的注释)

第一个选项:

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

第二个选项:

@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