我正在向我的项目添加一个模型,该模型与
models
目录中的一个类共享一个名称,但它位于 module
中并且与现有模型没有任何关系(比喻和字面意思):Offer
和 Partner::Offer
.
+ app
|-+ models
|-- offer.rb
|-+ partner
|- offer.rb
我使用
rails new model Partner::Offer
生成了新模型,它生成了适当的迁移和 FactoryBot 工厂,以及 Partner
模块:
module Partner
def self.table_name_prefix
'partner_'
end
end
现在,我遇到了一些奇怪的行为。我启动了 Rails 控制台并尝试使用工厂构建一个新的 Partner::Offer:
offer = FactoryBot.build(:partner_offer)
这将返回一个错误:
NoMethodError: undefined method 'external_id=' for #<Partner::Offer:0x0000000113622910>
。 external_id
是顶级 Offer
模型的属性,但不是 Partner::Offer
.
工厂似乎正在尝试构建顶级
Offer
对象。作为完整性检查,我只是输入 Partner::Offer.new
并观察结果,虽然新对象的类是正确的,但它具有顶级 Offer
类的所有字段。
我以前从未见过这种行为。是什么导致了混淆?
这是
Partner::Offers
工厂文件:
FactoryBot.define do
factory :partner_offer, class: 'Partner::Offer' do
partner_id { SecureRandom.hex }
expiration_date { 1.week.from_now }
amount { 123.45 }
end
end