命名空间模型不适用于多态性,我需要一个解决方法

Namespaced models don't work with polymorphism and I need a workaround

当模型在 rails 3.1 中命名空间时,多态关系不起作用。这是一个例子:

class Accounting::Request::Check < ActiveRecord::Base
  has_one :accounting_request, as: :requestable
end

class Accounting::Request < ActiveRecord::Base
  belongs_to :requestable, polymorphic: true
end


cr = Accounting::Request::Check.create!()
cr.create_accounting_request

结果:

NameError: uninitialized constant Accounting::Request::Check::AccountingRequest

我的问题是,在我们迁移到 rails 5 之前,我暂时如何解决这个问题?

One solution 我发现是添加 class_name: '::ClassName' 但这对我不起作用。

是的,rails 支持命名空间模型的多态性...

这里是修改后的代码,让它工作:

class Accounting::Request < ActiveRecord::Base
  belongs_to :requestable, polymorphic: true
end

class Accounting::CheckRequest < ActiveRecord::Base
  has_one :accounting_request, as: :requestable, class_name: 'Accounting::Request'
end

class_name 需要在 '-able' 模型上,并且需要完全指定包含 belongs_to 的 class。

也不是我在这里使用 has_one 而不是 has_many