【问题标题】:Rails 6 Rspec throws "ActiveModel::MissingAttributeError" on Carrierwave uploaderRails 6 Rspec 在 Carrierwave 上传器上抛出“ActiveModel::MissingAttributeError”
【发布时间】:2019-08-28 15:11:40
【问题描述】:

我有一个 FactoryBot 工厂在升级到 Rails 6 后出错。错误是:

Failure/Error: let(:lodge) { FactoryBot.create(:lodge) }

     ActiveModel::MissingAttributeError:
       can't write unknown attribute `checklist`

ChecklistLodge 上的上传器(Carrierwave),通过模型安装,具有字段和checklist_cache 的允许参数。

我已经运行了db:test:prepare,并且该字段存在于测试数据库中(Lodge.checklist是一个字符串)。

有问题的工厂:

FactoryBot.define do
  factory :lodge do
    name { Faker::Name.first_name }
    number { Faker::Number.number(digits: 3) }
    designator { Faker::Lorem.characters(number: 1) }
    combined { "999A" }
    status { "active" }
    association :council
    checklist { Rack::Test::UploadedFile.new(Rails.root.join('spec/support/lodge-checklist.pdf'), 'application/pdf') }
  end

end

无论我是否有清单行,错误仍然存​​在。

红宝石 2.6.3; Rails 6.0.0、Carrierwave 2.0.0(也出现在 master 分支上)

【问题讨论】:

  • 进一步研究:仅当上传器安装在该模型中包含的关注点中时才会发生这种情况。如果直接在模型RB文件中调用上传器,则运行干净。

标签: carrierwave rspec-rails ruby-on-rails-6


【解决方案1】:

这显然是由于上传者在included 块中对各种共享对象使用的关注点造成的。仅将其移回模型即可解决问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-20
    • 2015-06-10
    • 2015-07-05
    • 1970-01-01
    • 2018-10-07
    • 2013-01-31
    • 2016-04-05
    相关资源
    最近更新 更多