我对Rails 3中的多态关联有一些问题。我的模型看起来像这样:
class Address < ActiveRecord::Base
belongs_to :contactable, :polymorphic => true
end
class OrganisationUnit < ActiveRecord::Base
# some other associations
end
# Subclass of OrganisationUnit
class Company < OrganisationUnit
has_one :address, :as => :contactable
end
现在,当我想获取公司的地址时,Rails会生成以下SQL查询:
SELECT `addresses`.* FROM `addresses` WHERE (`addresses`.contactable_id = 1021 AND `addresses`.contactable_type = 'OrganisationUnit') LIMIT 1
在我看来这是错误的,因为contactable_type应该是“公司”。 有什么办法可以解决这个问题,或者告诉我们OrganisationUnit只是一个抽象的基类吗?
答案 0 :(得分:2)
这是预期的行为。将STI表链接到多态关联时,Rails会存储基类名而不是继承的类名。在通过id查找对象后发生STI类型转换。