Rails 4与CanCan: 包含load_and_authorize_resource后出现未知属性错误

3
我正在使用Rails 4,并且已经按照这个问题的说明使CanCan正常工作,但是有一个我认为可能相对常见的用例出现了问题。

我有一个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个回答

2
解决方案在我睡觉时想到。以下是我解决问题的方法:
唯一的原因是,在创建时 comment_params 没有出现问题,是因为我排除了额外的 :parent_comment_id 参数,就像这样:
@comment = post.comment.create(comment_params.except(:parent_comment_id))

当CanCan使用comment_params方法时,它没有进行任何的净化处理。因此,出现了问题。如果在每个控制器上逐一添加这种净化处理方法,会非常麻烦。所以我做了我一直该做的事情,不是通过:comment传递:parent_comment_id,而是使用hidden_field_tag将其传递到:comment之外,并通过普通的params访问它。
希望这能帮助其他犯同样错误的人!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接