2

RoR についての私の理解は悲しいことに欠けています。1 つのビューで維持したい 3 つの 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

欠けている概念は何ですか?

4

1 に答える 1

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
于 2009-04-21T22:22:05.520 に答える