我熟悉使用rails的多态关联,其中模型可以声明为多态,以获得属于众多其他模型的功能,例如:
class Comment < ActiveRecord::Base
belongs_to :commentable, :polymorphic => true
end
class Article < ActiveRecord::Base
has_many :comments, :as => :commentable
end
class Photo < ActiveRecord::Base
has_many :comments, :as => :commentable
end
class Event < ActiveRecord::Base
has_many :comments, :as => :commentable
end
是否存在处理逆情况的常见模式,其中模型可以具有将通过相同界面访问的众多其他模型(例如,人有许多宠物,其中宠物可以是狗,猫,等等。)?我应该只创建一个虚拟属性吗?
答案 0 :(得分:3)
对于您的宠物示例,STI可能是一个解决方案:
class Person < ActiveRecord::Base
has_many :pets
end
class Pet < ActiveRecord::Base
belongs_to :owner, class_name: "Person", foreign_key: "person_id"
# Be sure to include a :type attribute for STI to work
end
class Dog < Pet
end
class Cat < Pet
end
这仍然可以让您访问@person.pets
和@dog.owner
,@pet.owner
等。