尝试在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