Rails - 具有相同类名的模型,但其中一个在模块内

问题描述 投票:0回答:0

我正在向我的项目添加一个模型,该模型与

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

ruby-on-rails activemodel
© www.soinside.com 2019 - 2024. All rights reserved.