rails form_with form_for form for ruby-on-rails activerecord associations has-many

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:

  1. Al agregar un objeto a la asociación en el padre guardado, guarde el nuevo hijo.
  2. Agregar objeto a asociación en el padre no guardado no se guarda (ningún valor de clave externa)
  3. 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.