0

好的,所以我有三个不同的对象:人、地点和设备。每个人都可以有一个地址,在大多数情况下是多个地址和多个电话号码。所以我的想法是创建特定的对象表,有一个地址和一个电话表。这是我的问题:

所以通常,在我的 SQL 世界中,我只会在 address 和 phone 表中有一个 object_id 列,并将对象的 id 放在 object id 列中,然后选择所有匹配的地址或电话记录。

我可以这样做,执行 find_by_sql 并获取记录,但我宁愿留在 ActiveRecord 范式中。那么这是否意味着我应该在每个对象的表中都有一个 id 列,所以 person_id、place_id 等。

对此建模的“正确”方法是什么?

4

1 回答 1

1

您可以使用 activerecord 创建多态关联,因此您可以将object_id和添加object_type到地址和电话号码表中,并像这样指定关联:

class Address
  belongs_to :object, :polymorphic => true
end

class PhoneNumber
  belongs_to :object, :polymorphic => true
end

class Person
  has_many :addresses, :as => :object
  has_many :phone_numbers, :as => :object
end

class Place
  has_many :addresses, :as => :object
  has_many :phone_numbers, :as => :object
end

class Equipment
  has_many :addresses, :as => :object
  has_many :phone_numbers, :as => :object
end

这样,Person.first.addresses应该运行类似的查询Addresses.where(:object_type => "Person", :object_id => Person.first.id),对于其余的模型和关联,反之亦然。

于 2012-07-26T16:11:38.320 回答