尝试在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;被解析得很奇怪。
答案 0 :(得分:1)
CanCan无法使用Rails4。使用CanCanCan,您不需要任何这些解决方法。只需要像Rails4中通常那样使用以下方法。
create_params或update_params(取决于您正在执行的操作)
_params如article_params(这是 rails中的默认约定,用于命名param方法)
resource_params(您可以在每个中指定一般命名的方法 控制器)