4

我熟悉使用 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

是否有一种常见的模式来处理相反的情况,其中一个模型可以有许多其他模型,这些模型将通过相同的接口访问(例如,一个人有很多宠物,宠物可以是狗、猫等) ? 我应该只创建一个虚拟属性吗?

4

1 回答 1

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.petsand @dog.owner,@pet.owner等。

于 2014-03-04T19:03:56.003 回答