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_paramsimport_params,甚至尝试 custom_name 对于消毒剂,都导致了同样的问题)。

有没有人有这方面的经验,如何解决它? 我的意思是我可以尝试在我的 MobileUser 上添加虚拟属性文件,希望这会解决它, 但它似乎不是一个好的解决方案。

这是在我过渡到 rails 5.

之后才发生的

问题是我需要将 load_and_authorize_resource 更改为 authorize_resource,因为我真的不需要实际对象来创建操作。

抱歉,如果这是垃圾邮件,我以为其他人可以使用这个答案,但我找不到它