我有一个非常简单的控制器,该控制器使用一项服务来导入移动用户,这在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
,该文件包含我从中导入的许多移动用户。为此,我实际上不需要模型上的功能。
并且代码执行甚至不会在binding.pry
方法内的create
处停止。我查看了来自cancancan的链接:
https://github.com/CanCanCommunity/cancancan/wiki/Strong-Parameters
但是它并没有解决我的问题,强params方法在这里似乎没有问题(我尝试命名方法create_params
,import_params
,甚至尝试使用custom_name作为消毒剂。 ,都导致了相同的问题)。
是否有人对此有经验,如何解决??我的意思是我可以尝试在MobileUser
上添加虚拟属性文件,希望可以解决该问题,但事实并非如此。似乎不是一个好方法。
这只有在我过渡到Rails 5之后才发生。
答案 0 :(得分:1)
问题是我需要将load_and_authorize_resource
更改为authorize_resource
,因为我确实不需要实际的对象来创建操作。
对不起,如果这是垃圾邮件,我以为其他人可以使用此答案,但我找不到它