has_many
Ruby on Rails を使用して、所有者が常に既知であるが、関連付け内の項目が所有者の列で指定されたポリモーフィック (ただし同種) 型になるポリモーフィックな関係を実現するにはどうすればよいですか? たとえば、Producer
クラスのhas_many
製品が生産者のインスタンスに、実際には多くの自転車、アイスキャンディー、または靴ひもがあるとします。各製品クラス (自転車、ポプシクルなど) にプロデューサーとの関係を簡単に持たせることができますがbelongs_to
、プロデューサー インスタンスが与えられた場合、それらがさまざまなタイプ (プロデューサー インスタンスごと) である場合、どのように製品のコレクションを取得できますか?
Rails のポリモーフィックな関連付けにより、プロデューサーは多くの製品に属することができますが、関係を逆にする必要があります。例えば:
class Bicycle < ActiveRecord::Base
belongs_to :producer
end
class Popsicle < ActiveRecord::Base
belongs_to :producer
end
class Producer < ActiveRecord::Base
has_many :products, :polymorphic_column => :type # last part is made-up...
end
したがって、私の Producer テーブルには既に、いくつかの製品クラス (自転車、ポプシクルなど) に対応する「タイプ」列がありますが、どうすれば Rails で次のようなことができるようになります:
>> bike_producer.products
#=> [Bicycle@123, Bicycle@456, ...]
>> popsicle_producer.products
#=> [Popsicle@321, Popsicle@654, ...]
これが明らかであるか、よくある繰り返しである場合は申し訳ありません。私はそれを簡単に達成するのに驚くほど苦労しています。