命名空间模型不适用于多态性,我需要一个解决方法
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
。
当模型在 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
。