Resetting Has One Assocations
Tested with Rails 4.0
Just a quick note since I could not find this information
anywhere. Making sure a has_many
association is reloaded on next
access is easy. Just call the
reset
method
provided by the collection proxy:
class Post
has_many :comments
end
post.comments.reset
post.comments # fetches comments from database
But how to accomplish the same for has_one
associations?
class Post
has_one :last_comment, -> { order 'created_at' }, class_name: "Comment"
end
Calling post.last_comment
just returns a comment (or nil
). Of
course, you can pass true
as the force_reload
parameter:
post.last_comment(true) # fetches comment from database
But what if there is no need to reload the association now, only next
time it is used? Turns out the underlying association object can
be accessed via the associations
method:
post.associations(:last_comment).reset
Now the cache is cleared and the next call to post.last_comment
will
fetch the record from the database.