修复Rails Gem CanCan bug for ActiveModel :: ForbiddenAttributesError

时间:2015-03-10 21:54:36

标签: ruby-on-rails ruby ruby-on-rails-4 cancan

尝试在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关联的模型和一个将用户添加到组的方法。

当我想使用带有组ID和用户对象的add_user将用户添加到组时,我现在收到此错误。

该例程由以下人员调用:

<%= 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 

这就是错误:

  

参数:{&#34; group&#34; =&gt;&#34; 16&#34;,&#34; id&#34; =&gt;&#34; 16&#34;,&#34; USER_ID&#34; = GT;&#34; 332&#34;}    NoMethodError - 未定义的方法`permit&#39; for&#34; 16&#34;: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对象时,参数param&#34; group =&gt; X&#34;被解析得很奇怪。

1 个答案:

答案 0 :(得分:1)

CanCan无法使用Rails4。使用CanCanCan,您不需要任何这些解决方法。只需要像Rails4中通常那样使用以下方法。

  

create_params或update_params(取决于您正在执行的操作)

     

_params如article_params(这是   rails中的默认约定,用于命名param方法)

     

resource_params(您可以在每个中指定一般命名的方法   控制器)

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