多态关联

这种类型的关联允许 ActiveRecord 模型属于多种模型记录。常见例子:

class Human < 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

如果没有此关联,你将在地址表中拥有所有这些外键,但你只有其中一个的值,因为在这种情况下,地址只能属于一个实体(人或公司)。这是它的样子:

class Address < ActiveRecord::Base
  belongs_to :human
  belongs_to :company
end