2009-04-21 44 views
2

我對RoR的理解是令人遺憾的。我想在一個視圖中保留三個一對一的關係。我有以下型號:基本導軌問題:一對一關係

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有類似的屬性嗎? – 2009-04-21 22:14:46

+0

不,我試圖縮短我的示例代碼,應該通過trait4使用trait1,而不是重複使用trait1和trait2 – littlebit 2009-04-21 22:18:30

回答

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