Rails de base Question: One-to-One relations
-
13-09-2019 - |
Question
Ma compréhension de RoR est cruellement défaut. J'ai trois un-à-un les relations que je veux maintenir un point de vue. Je les modèles suivants:
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
Un Ood aurait soit une entrée dans la table Female_Trait ou d'une table Male_Trait, mais pas les deux. Mes efforts pour modifier légèrement les échafaudés nouvelles / créer des définitions modifier / de mise à jour dans mon OodController n'ont pas réussi. Voici un exemple de ma logique défectueuse dans 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
Quelle notion suis-je manque?
La solution
Pourquoi ne pas utiliser une relation polymorphes qui pointe soit Female_Trait ou 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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow