修复 Rails Gem CanCan 错误 for ActiveModel::ForbiddenAttributesE



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

活动模型::禁止属性错误 - 活动模型::禁止属性错误:

我在这里在线找到了修复程序。

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

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 

这是错误:

参数: {"group"=>"16", "id"=>"

16", "user_id"=>"332"} NoMethodError - 未定义的方法"允许"为"16":字符串:

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或update_params(取决于您正在执行的操作)

_params例如article_params(这是 Rails 中用于命名参数方法的默认约定)

resource_params(可以在每个方法中指定的通用名称方法 控制器)

链接在这里: https://github.com/CanCanCommunity/cancancan

相关内容

  • 没有找到相关文章

最新更新