修复 Rails Gem ActiveModel::ForbiddenAttributesError 的 CanCan 错误

Fix Rails Gem CanCan bug for ActiveModel::ForbiddenAttributesError

尝试在 CanCan 设置为 manage: all 的模型上创建时,我不断收到此错误:

ActiveModel::ForbiddenAttributesError - ActiveModel::ForbiddenAttributesError:

我在网上找到了修复程序 here

将此代码粘贴到我的应用程序控制器中:

before_filter do
  resource = controller_name.singularize.to_sym
  method = "#{resource}_params"
  params[resource] &&= send(method) if respond_to?(method, true)
end

这导致了我的问题。我有两个具有 belongs_to_has_many 关联的模型和一个将用户添加到组的方法。

当我想使用 add_user 将用户添加到一个组时,它采用组 ID 和用户对象,我现在收到此错误。

例程调用者:

<%= link_to 'Add', add_user_group_path(group: @group, user_id: id)  %> 

该方法如下所示:

def add_user
  group = Group.find(params[:id])
  user = User.find(params[:user_id])
  group.users << user
end 

这是错误:

Parameters: {"group"=>"16", "id"=>"16", "user_id"=>"332"} NoMethodError - undefined method `permit' for "16":String:

before_filter 是什么方法会导致此错误?

================更新===================

我终于弄明白了。

由于组 ID 是在来自控制器的 add_user 调用中自动传递的,因此我不得不更改此行:

<%= link_to 'Add', add_user_group_path(group: @group, user_id: id)  %> 

至:

<%= link_to 'Add', add_user_group_path(user_id: id)  %> 

现在可以使用了。事实证明,当您传递 @group 对象时,参数 "group => x" 被解析得很奇怪。

CanCan 不支持 Rails4。使用 CanCanCan,您不需要任何这些解决方法。就像我们通常在 Rails4 中所做的那样,只需以下一些方法即可。

create_params or update_params (depending on the action you are performing)

_params such as article_params (this is the default convention in rails for naming your param method)

resource_params (a generically named method you could specify in each controller)

Link 这里:https://github.com/CanCanCommunity/cancancan