2009-04-21 7 views
2

RoRの私の理解は悲しいことに欠けています。私は1つの視点で維持したい3つの1対1の関係を持っています。私は以下のモデルを持っています:基本的なレール質問:1対1の関係

class Ood< ActiveRecord::Base 
    has_one :female_trait 
    has_one :male_trait 
end 

class Female_Trait < ActiveRecord::Base 
    belongs_to :ood 
end 

class Male_Trait < ActiveRecord::Base 
    belongs_to :ood 
end 

Oodには、Female_TraitテーブルまたはMale_Traitテーブルのいずれかのエントリがありますが、両方は存在しません。私のOodControllerの足場の新しい/作成編集/更新の定義を微調整する私の努力は成功していません。 OodControllerの私の間違ったロジックの例を次に示します。

def new 
    @ood = Ood.new 
    @female_trait = Female_trait.new 
    @male_trait = Male_trait.new 
    ... 
end 

def create 
    @ood = Ood.new(params[:ood]) 
    if !params[:female_trait][:trait1].blank? and !params[:female_trait[:trait2].blank? 
    @female_trait = @ood.female_trait.build(params[:female_trait]) 
    if !params[:male_trait][:trait1].blank? and !params[:male_trait[:trait2].blank? 
    @male_trait = @ood.male_trait.build(params[:male_trait]) 
    ... 
end 

私の考え方は何ですか?

+0

female_traitとmale_traitには同様の属性がありますか? –

+0

いいえ、私は私のサンプルコードを短くしようとしていましたが、trait1とtrait2を再利用するのではなく、trait1からtrait4までを使用してください。 – littlebit

答えて

2

Female_TraitまたはMale_Traitのいずれかを指す多態性関係を使用しないのはなぜですか?

class Ood< ActiveRecord::Base 
    belongs_to :trait, :polymorphic => true 
end 

class Female_Trait < ActiveRecord::Base 
    has_one :oods, :as => :trait 
end 

class Male_Trait < ActiveRecord::Base 
    has_one :oods, :as => :trait 
end 
+1

どのようにして移行を表現できますか? –

+0

ええ?どのようにFemale_Traitオブジェクトを作成する例を示すことができます、病気の投票ウルのANSまで:) –