在 model 层 polymorphic 可以实现多态关联的功能,如网上这个比较简单的例子:
lass Person < ActiveRecord::Base
has_one :address, :as => :addressable
end
class Company < ActiveRecord::Base
has_one :address, :as => :addressable
end
class Address < ActiveRecord::Base
belongs_to :addressable, :polymorphic => true
end
这样 Address 有 adressable_id addressable_type 其中,addressable_type 可以为 Company 或者 Person。 而 touch 则能实现当子表的记录更新或增加时,父表的记录更新,如
class Person < ActiveRecord::Base
has_one :address, :as => :addressable
end
class Address < ActiveRecord::Base
belongs_to :addressable, :touch=> true
end
这样,当 person.addresses.first update, person.updated_on 会更新。 但是当 polymorphic 和 touch 同时使用,即 如果将第一段代码中
class Address < ActiveRecord::Base
belongs_to :addressable, :polymorphic => true
end
## 改成
class Address < ActiveRecord::Base
belongs_to :addressable, :polymorphic => true, :touch => true
end
的时候,父表记录中的 updated_on 是不会更新的。[PS: 应该是编译器不知道如何去找父表] 请问有什么方法可以在实现多态关联的前提下更新父表的记录吗? 谢谢!