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包含 a 时创建关联:

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。我错过了什么?

4

1 回答 1

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将它传递到外面:comment并通过普通的、旧的params.

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

于 2013-06-22T15:28:05.583 回答