Tengo estos 5 modelos: Guardián, Estudiante, Relación, Tipo de relación y Escuela. Entre ellos, tengo estas asociacionesObtener dos asociaciones dentro de una fábrica para compartir otra asociación
class Guardian < ActiveRecord::Base
belongs_to :school
has_many :relationships, :dependent => :destroy
has_many :students, :through => :relationships
end
class Student < ActiveRecord::Base
belongs_to :school
has_many :relationships, :dependent => :destroy
has_many :guardians, :through => :relationships
end
class Relationship < ActiveRecord::Base
belongs_to :student
belongs_to :guardian
belongs_to :relationship_type
end
class School < ActiveRecord::Base
has_many :guardians, :dependent => :destroy
has_many :students, :dependent => :destroy
end
class RelationshipType < ActiveRecord::Base
has_many :relationships
end
Quiero escribir un FactoryGirl que defina una relación. Cada relación debe tener un tutor y un estudiante. Estos dos deben pertenecer a la misma escuela. La fábrica de guardias tiene una asociación con la escuela, y también lo hace la fábrica de estudiantes. No he podido lograr que se construyan en la misma escuela. Tengo el siguiente código:
FactoryGirl.define do
factory :relationship do
association :guardian
association :student, :school => self.guardian.school
relationship_type RelationshipType.first
end
end
Esto da como resultado el siguiente error cuando intento de construir una relación mediante esta fábrica:
undefined method `school' for #<FactoryGirl::Declaration::Implicit:0x0000010098af98> (NoMethodError)
¿Hay alguna manera de hacer lo que quiero, hacer que el tutor y el estudiante pertenezcan a la misma escuela sin tener que recurrir a pasar a los guardianes y estudiantes ya creados a la fábrica (¿cuál no es su propósito)?
No estoy seguro de si esto tiene algo que ver con el error, pero la clase de la Escuela fue escrito como una segunda declaración de la clase Relación (antes de mi edición). – PinnyM