ruby-on-rails - form_with - select rails helper
¿Cuándo salvará ActiveRecord las asociaciones? (1)
Lamentablemente, no hay tal cosa como association_to_save. Sin embargo, hay algunas reglas que dicen lo que se guarda cuando. Puede encontrarlos aquí: http://guides.rubyonrails.org/association_basics.html . Puntos: 4.1.5 (belongs_to), 4.2.5 (has_one), 4.3.4 (has_many) y 4.4.4 (habtm).
ACTUALIZAR:
En el caso de la asociación has_many, el hijo se guarda al guardar el padre si child.new_record? devuelve true (child aún no se guardó en db), o la columna foreign_key necesita ser actualizada. Esta es la razón por:
- Al agregar un objeto a la asociación en el padre guardado, guarde el nuevo hijo.
- Agregar objeto a asociación en el padre no guardado no se guarda (ningún valor de clave externa)
- Si el padre no guardado se está guardando y tiene algunos objetos secundarios en el caché de asociación, esos objetos se guardan para actualizar foreign_key.
1) Sé que guardará las asociaciones cuando se guarde autosave: true
según http://railsapi.com/doc/rails-v2.3.8/classes/ActiveRecord/AutosaveAssociation.html
2) Sé que salvará asociaciones que están construidas como
book = Book.new(name: ''foo'')
book.authors.build(name: ''bar'') #has_many
book.save
o como
book = Book.new(name: ''foo'')
book.build_author(name: ''bar'') #has_one
book.save
3) Creo que las asociaciones también se guardan cuando se asignan o agregan
book = Book.new(name: ''foo'')
book.author = Author.new(name: ''bar'')
book.save
o
book = Book.new(name: ''foo'')
book.authors << Author.new(name: ''bar'')
book.save
Pero tengo un error complicado que implica algo que no se guarda automáticamente cuando yo esperaba. Por lo tanto, quiero depurar inspeccionando el book
para verificar que realmente se guardará lo que creo que va a guardarse.
TL; DR; ¿Qué estado interno se verifica al guardar asociaciones? Supongo que un modelo tiene una variable de instancia interna como associations_to_save
que las asociaciones se agregan cuando se crean. Luego, cuando se guarda el modelo, recorre esas asociaciones y las guarda también.