ポリモーフィックな関連付けを使用して、かなり通常のクラス構造を持っています。
class Contact < ActiveRecord::Base
has_many :opportunities, :as => :has_opportunities, dependent: :destroy
end
class Company < ActiveRecord::Base
has_many :opportunities, :as => :has_opportunities, dependent: :destroy
end
class Opportunity < ActiveRecord::Base
belongs_to :has_opportunities, polymorphic: true
belongs_to :contact, foreign_key: 'has_opportunities_id', conditions: "opportunities.has_opportunities_type = 'Contact'"
belongs_to :company, foreign_key: 'has_opportunities_id', conditions: "opportunities.has_opportunities_type = 'Company'"
end
Rails 4 では、:conditions を使用することは推奨されていませんが、子オブジェクトから親オブジェクトへのアクセスを許可するために必要な「新しい」構文がわかりません。
編集: はい、連絡先または会社を返す機会.has_opportunitiesを実行できますが、多くの場合、コードでは機会.連絡先または機会.会社を使用する方が「より良い」です。