rails model association author id

时间:2017-02-19 00:47:17

标签: ruby-on-rails ruby

我正在使用rails_best_practices来提取我的代码。 评论属于post,属于用户。 我的comments_controller.rb文件看起来像这样

class CommentsController < ApplicationController
  before_action :find_post

  def create
    @comment = @post.comments.create comment_params
    @comment.user_id = current_user.id
    redirect_to @post if @comment.save
  end

  private

    def find_post
      @post = Post.find(params[:post_id])
    end

    def comment_params
      params.require(:comment).permit(:post_id, :body)
    end
end

我收到此错误use model association (for @comment)。 重构后,我的create方法看起来像这样

def create
  @comment = @post.comments.create(
    comment_params.merge(user_id: current_user.id)
  )
  redirect_to @post if @comment.save
end

我的问题是:这是最好和最正确的方法是什么?

1 个答案:

答案 0 :(得分:1)

通常情况下,我建议在控制器特定的_params函数内烘焙任何必需的参数。也就是说,这样做:

def comment_params
  params.require(:comment).permit(:post_id, :body).merge(
    user: current_user
  )
end

然后,当它进入你的控制器动作时,你会非常高兴。

我倾向于使用build方法为newcreate构建正确的对象:

def build_comment
  @comment = @post.comments.build(comment_params)
end

现在,如果你放松了require对params的限制,这将正确填充,但是由你决定如何灵活。我发现这一直在为多个编辑轮次填充和准备相同的对象,以及需要设置一些默认值的第一轮。