CanCan的ForbiddenAttributesError

时间:2017-09-26 08:25:43

标签: ruby-on-rails cancancan

在我的BrandsController中,我有以下两种参数方法:

def create_brand_params
  params.require(:brand).permit(:name, content_attributes: %i[app_name app_launcher_name])
end

def update_brand_params
  params.require(:brand).permit(content_attributes: %i[id app_name app_launcher_name])
end

然后控制器具有如下权限:

load_resource :client
load_and_authorize_resource :brand, through: :client, shallow: true

最后是能力:

can :manage, Client, id: Client.owned_clients(user.id).map(&:id)
can :manage, Brand, client: { id: Client.owned_clients(user.id).map(&:id) }

简而言之,用户只能管理拥有客户所有权的客户和品牌。除了创建品牌之外,这在客户端以及大多数品牌方法中都能正常工作。当我尝试创建一个新品牌时,我收到以下错误:ActiveModel::ForbiddenAttributesError

但是我能够很好地编辑一个品牌......为什么我在创建时会收到此错误但不会更新?

为了澄清,用户只能为他们拥有的客户创建一个品牌,因此我无法为创建方法禁用CanCan。为了解决这个问题,我现在必须添加这个hack:

load_and_authorize_resource :brand, through: :client, except: :create

保护新方法,但允许创建不是我想要的...

0 个答案:

没有答案