No he podido encontrar ninguna documentación sobre el método .build en Rails (actualmente estoy usando 2.0.2).
A través de la experimentación, parece que puede usar el método de compilación para agregar un registro a una has_many
relación antes de que cualquiera de los registros se haya guardado.
Por ejemplo:
class Dog < ActiveRecord::Base
has_many :tags
belongs_to :person
end
class Person < ActiveRecord::Base
has_many :dogs
end
# rails c
d = Dog.new
d.tags.build(:number => "123456")
d.save # => true
Esto guardará tanto el perro como la etiqueta con las claves externas correctamente. Esto no parece funcionar en una belongs_to
relación.
d = Dog.new
d.person.build # => nil object on nil.build
También he intentado
d = Dog.new
d.person = Person.new
d.save # => true
La clave foránea Dog
no está configurada en este caso debido al hecho de que en el momento en que se guarda, la nueva persona no tiene una identificación porque aún no se ha guardado.
Mis preguntas son:
¿Cómo funciona Build para que Rails sea lo suficientemente inteligente como para descubrir cómo guardar los registros en el orden correcto?
¿Cómo puedo hacer lo mismo en una
belongs_to
relación?¿Dónde puedo encontrar documentación sobre este método?
Gracias
fuente
belongs_to
" y "Métodos agregados porhas_one
" . Se puede encontrar más documentación técnica en los documentos de API:belongs_to
yhas_one
.Respuestas:
Donde está documentado:
De la documentación de la API bajo la asociación has_many en " Módulo ActiveRecord :: Asociaciones :: ClassMethods "
La respuesta para construir en la dirección opuesta es una sintaxis ligeramente alterada. En tu ejemplo con los perros,
o incluso
También puede usar create_dog para que se guarde instantáneamente (al igual que el método "crear" correspondiente al que puede llamar en la colección)
¿Cómo son los rieles lo suficientemente inteligentes? Es mágico (o más exactamente, simplemente no lo sé, ¡me encantaría descubrirlo!)
fuente
find_by_email
yfind_by_column_name
métodos. Convierte el método que pasa en una cadena y lo disecciona e intenta asociarlo con los nombres de columna de su tabla.fuente