Basic Rails Вопрос: отношения один-к-одному - PullRequest
2 голосов
/ 22 апреля 2009

К сожалению, мое понимание 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

Какую концепцию мне не хватает?

1 Ответ

2 голосов
/ 22 апреля 2009

Почему бы не использовать полиморфные отношения, которые указывают либо на 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
...