CanCan可以抛出ActiveModel :: UnknownAttributeError设置不存在的属性

时间:2018-07-26 18:44:59

标签: ruby-on-rails ruby-on-rails-5 cancancan

我有一个非常简单的控制器,该控制器使用一项服务来导入移动用户,这在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_paramsimport_params,甚至尝试使用custom_name作为消毒剂。 ,都导致了相同的问题)。

是否有人对此有经验,如何解决??我的意思是我可以尝试在MobileUser上添加虚拟属性文件,希望可以解决该问题,但事实并非如此。似乎不是一个好方法。

这只有在我过渡到Rails 5之后才发生。

1 个答案:

答案 0 :(得分:1)

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

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