2013-06-21 43 views
3

后,我在Rails的4个工作,并已得到惨惨很好地与奉this issue一个使用案例,我觉得可能是比较常见的工作,除了Rails的4惨惨:未知属性错误包括load_and_authorize_resource

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

回答

2

解决方案来到我的睡眠。下面是我做来解决这个问题:

comment_params没有正常有上创建一个问题的唯一原因,是因为我不包括额外的:parent_comment_id参数,如:

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

当惨惨使用然而,这种方法没有这样的卫生条件。因此,这个问题。将卫生设施添加到CanCan中是一件很麻烦的事情,所以我做了我应该一直做的事情,而不是在:comment的内部传递:parent_comment_id,我用hidden_field_tag将它传递到:comment以外,并通过它访问平原,旧params

我希望这可以帮助别人谁犯了类似的错误!