1
0
mirror of https://github.com/jbranchaud/til synced 2026-01-03 15:18:01 +00:00
Files
til/rails/autosave-false-on-activerecord-associations.md

45 lines
1.2 KiB
Markdown

# Autosave False On ActiveRecord Associations
A relationship between two ActiveRecord models can be established with a
`has_one` or `has_many` association. This relationship has some
implications. By default, saving a record will also save the associated
records that have since been built. Consider this example of users that have
many posts (`has_many posts`).
```ruby
> u = User.first
#=> #<User ...>
> u.posts
#=> []
> u.posts.build(title: "Some Title", content: "This is a post")
#=> #<Post ...>
> u.save
#=> true
> u.posts(reload: true)
#=> [#<Post ...>]
```
When the user is saved, the associated post that was built for that user
also gets saved to the database.
If the association is instead defined with the `autosave` option set to
false, then saving a record will not cause associated records to also be
saved. The associated records will need to be saved explicitly. Consider the
same example from above, but with `has_many posts, autosave: false`.
```ruby
> u = User.first
#=> #<User ...>
> u.posts
#=> []
> u.posts.build(title: "Some Title", content: "This is a post")
#=> #<Post ...>
> u.save
#=> true
> u.posts(reload: true)
#=> []
```
The post wasn't saved with the user and it wasn't saved explicitly, so it
isn't persisted to the database.