CanCanCan 抛出 ActiveModel::UnknownAttributeError 设置不存在的属性
CanCanCan throwing ActiveModel::UnknownAttributeError setting non existing attribute
我有一个非常简单的控制器,它使用服务导入移动用户,在 rails 5 升级之前它工作正常,所以我确定它不是服务代码。这是我的控制器:
module Admin
module MobileUsers
class ImportsController < Admin::BaseController
load_and_authorize_resource class: MobileUser
def create
binding.pry
importer = ::MobileUserImportService.new(resource_params)
success = importer.perform
unless success
@error = importer.error
render :create, status: 400
end
end
private
def resource_params
params.permit(:file)
end
end
end
end
当我尝试为创建操作执行 rspec 测试时,出现此错误:
ActiveModel::UnknownAttributeError:
unknown attribute 'file' for MobileUser.
这是正确的,移动用户不存在属性 file
,该文件包含我从中导入的一堆移动用户。我实际上不需要模型的功能。
并且代码执行甚至不会在 create
方法内的 binding.pry
处停止。我看过来自 cancancan 的 link:
https://github.com/CanCanCommunity/cancancan/wiki/Strong-Parameters
但这并没有解决我的问题,强参数方法在这里似乎不是问题(我试过将方法命名为 create_params
、import_params
,甚至尝试 custom_name 对于消毒剂,都导致了同样的问题)。
有没有人有这方面的经验,如何解决它? 我的意思是我可以尝试在我的 MobileUser
上添加虚拟属性文件,希望这会解决它, 但它似乎不是一个好的解决方案。
这是在我过渡到 rails 5.
之后才发生的
问题是我需要将 load_and_authorize_resource
更改为 authorize_resource
,因为我真的不需要实际对象来创建操作。
抱歉,如果这是垃圾邮件,我以为其他人可以使用这个答案,但我找不到它
我有一个非常简单的控制器,它使用服务导入移动用户,在 rails 5 升级之前它工作正常,所以我确定它不是服务代码。这是我的控制器:
module Admin
module MobileUsers
class ImportsController < Admin::BaseController
load_and_authorize_resource class: MobileUser
def create
binding.pry
importer = ::MobileUserImportService.new(resource_params)
success = importer.perform
unless success
@error = importer.error
render :create, status: 400
end
end
private
def resource_params
params.permit(:file)
end
end
end
end
当我尝试为创建操作执行 rspec 测试时,出现此错误:
ActiveModel::UnknownAttributeError:
unknown attribute 'file' for MobileUser.
这是正确的,移动用户不存在属性 file
,该文件包含我从中导入的一堆移动用户。我实际上不需要模型的功能。
并且代码执行甚至不会在 create
方法内的 binding.pry
处停止。我看过来自 cancancan 的 link:
https://github.com/CanCanCommunity/cancancan/wiki/Strong-Parameters
但这并没有解决我的问题,强参数方法在这里似乎不是问题(我试过将方法命名为 create_params
、import_params
,甚至尝试 custom_name 对于消毒剂,都导致了同样的问题)。
有没有人有这方面的经验,如何解决它? 我的意思是我可以尝试在我的 MobileUser
上添加虚拟属性文件,希望这会解决它, 但它似乎不是一个好的解决方案。
这是在我过渡到 rails 5.
之后才发生的问题是我需要将 load_and_authorize_resource
更改为 authorize_resource
,因为我真的不需要实际对象来创建操作。
抱歉,如果这是垃圾邮件,我以为其他人可以使用这个答案,但我找不到它