0

わかりました、3 つの異なるオブジェクトがあります: 人物、場所、および機器です。それぞれが住所を持つことができます。ほとんどの場合、複数の住所と複数の電話番号があります。だから私の考えは、アドレスと電話テーブルを持つ特定のオブジェクトテーブルを作成することです。ここで私の質問:

したがって、通常、私の SQL の世界では、住所と電話のテーブルに object_id 列があり、オブジェクトの ID を object id 列に入れ、一致するすべての住所または電話のレコードを選択します。

これを実行し、find_by_sql を実行してレコードを取得することもできますが、ActiveRecord パラダイム内にとどまりたいと思います。つまり、各オブジェクトのテーブルに id 列が必要なので、person_id、place_id など.

これをモデル化する「正しい」方法は何ですか?

4

1 に答える 1

1

activerecord を使用してポリモーフィックな関連付けを作成できるため、addresses テーブルと phone_numbers テーブルに と を追加して、関連付けを次のように指定できますobject_idobject_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 に答える