2011-02-09 10 views
0

私はいくつかの一見単純な関連付けを行いたい:複数の団体が

class OrderWizard < ActiveRecord::Base 
    belongs_to :buyer_wizard,  :class_name => MiniWizard.name 
    belongs_to :seller_wizard, :class_name => MiniWizard.name 
end 

class MiniWizard < ActiveRecord::Base 
    has_one :order_wizard, :foreign_key = '????' # Could be buyer_wizard_id or seller_wizard_id 

    def is_buyer_wizard? 
    ?? 
    end 

    def is_seller_wizard? 
    ?? 
    end 
end 
  1. アンの関連MiniWizardは、それに接続しているかを知る必要があります。仮定has_many:行く最善の方法ですか?もしそうなら、モデルはどのように見えるでしょうか?

  2. MiniWizardインスタンスは、購入者か売り手かを知る必要があります。これを行う方法に立ち往生してください。あなたが実際にはおそらく2つの関連付けをしたい

答えて

1

は、例えば、このようなものは、より正確な関係を表す場合があります

class MiniWizard < ActiveRecord::Base 
    has_one :bought_order_wizard, :foreign_key => 'buyer_wizard_id', :class_name => 'MiniWizard' 
    has_one :sold_order_wizard, :foreign_key => 'seller_wizard_id', :class_name => 'MiniWizard' 

    def order_wizard 
    bought_order_wizard || sold_order_wizard 
    end 

    def is_buyer_wizard? 
    !bought_order_wizard.nil? 
    end 

    def is_seller_wizard? 
    !sold_order_wizard.nil? 
    end 
end 
+0

しかしMiniWizardインスタンスは1つのみorder_wizardを持つことになります。ではなぜhas_manyですか? – jevy

+0

私は、has_oneのケースで働くための答えを更新しました。 has_oneとhas_manyの両方がユースケースに応じて動作するため、関係をどのように定義するかは重要ではありません。ポイントは2つの関係 - 各外部キーに1つの関係 - 単一の関係ではありません。 –

+0

..もし私がただ望むのであれば、order_wizardは追加されたメソッドを実行できますか? – jevy