I know that it will save associations when autosave: true
as per https://api.rubyonrails.org/classes/ActiveRecord/AutosaveAssociation.html
I know that it will save associations that are constructed like
book = Book.new(name: 'foo')
book.authors.build(name: 'bar') #has_many
book.save
or like
book = Book.new(name: 'foo')
book.build_author(name: 'bar') #has_one
book.save
book = Book.new(name: 'foo')
book.author = Author.new(name: 'bar')
book.save
or
book = Book.new(name: 'foo')
book.authors << Author.new(name: 'bar')
book.save
But, I have a complicated bug that involves something not auto-saving when I would expect it to. So, I want to debug by inspecting book
to verify what I think is going to be saved will actually be saved.
TL; DR;
What internal state is checked when saving associations? I'm assuming that a model has an internal instance variable like associations_to_save
that associations get added to when they are created. Then, when the model is saved, it loops through those associations and saves them too.
Unfortunately there are no such thing like associations_to_save. However there are some rules saying what is being saved when. You can find those here: http://guides.rubyonrails.org/association_basics.html. Points: 4.1.5 (belongs_to), 4.2.5 (has_one), 4.3.4 (has_many) and 4.4.4 (habtm).
UPDATE:
In case of has_many association, the child is saved on saving the parent if child.new_record? returns true (child was not yet saved to db), or the foreign_key column needs to be updated. This is why: