带有CanCan的Rails 4:包含load_and_authorize_resource后的未知属性错误

时间:2013-06-21 18:35:04

标签: cancan ruby-on-rails-4 strong-parameters

我正在使用Rails 4,并且已经让CanCan能够很好地处理来自this issue的说明,除了之外我认为可能相对常见的一个用例。

我有一个Comment模型,has_many :comments, through: :replies用于嵌套注释。所有这一切都运行良好,直到我将load_and_authorize_resource添加到我的评论控制器。问题似乎源于隐藏字段向我的创建操作发送可选的:parent_comment_id属性。

我通过强参数允许此属性:

def comment_params
  params.require(:comment).permit(:content, :parent_comment_id, :post_id, :comment_id, :user_id)
end

如果包含:parent_comment_id,我可以创建关联:

if comment_params[:parent_comment_id] != nil
  Reply.create({:parent_comment_id => comment_params[:parent_comment_id], :comment_id => @comment.id})
end

但是,一旦我添加load_and_authorize_resource,我就会收到:parent_comment_id的未知属性错误。我错过了什么?

1 个答案:

答案 0 :(得分:2)

睡觉时,我找到了解决方案。以下是我为解决问题所做的工作:

comment_params通常在创建时没有问题的唯一原因是因为我排除了额外的:parent_comment_id参数,如下所示:

@comment = post.comment.create(comment_params.except(:parent_comment_id))

然而,当CanCan使用comment_params方法时,它没有这样的卫生设施。因此,问题。在每个控制器的基础上将这个卫生设施添加到CanCan会很麻烦,所以我做了我应该做的一切,而不是通过:parent_comment_id :comment内部hidden_field_tag,我使用{{1将它传递到:comment之外并通过普通的旧params访问它。

我希望这可以帮助其他犯同样错误的人!