我正在用嵌套资源构建一个crud。
Post
has_many :comments
和我的comments
belongs_to :user
和belongs_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这似乎正在做我正在做的事情。
这看起来很不稳定,我不确定我是否正确地这样做了。有没有更好的办法?什么是最佳做法?
答案 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