Rieles básicas Pregunta: Uno-a-uno relaciones
-
13-09-2019 - |
Pregunta
Mi comprensión de RoR es muy deficiente. Tengo tres relaciones uno-a-uno que quiero mantener en una sola vista. Tengo los siguientes modelos:
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 tendría ya sea una entrada en la tabla o mesa Female_Trait Male_Trait, pero no ambos. Mis esfuerzos de ajustar las nuevas definiciones andamiaje crear / editar / actualizar en mi OodController no han tenido éxito. He aquí un ejemplo de mi lógica defectuosa en 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
¿Qué concepto me falta?
Solución
¿Por qué no utilizar una relación polimórfica que apunta a cualquiera Female_Trait o 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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow