Consider we have a model student when we access data from this using the following command.
student = Student.take
The variable student contains the data of a student. Each student has enrolled in many courses, which is another model.
On printing the student, we get the following data
{
id:1,
name: "Bhanu",
courses:[{
id: 2,
name: "Physics"
}]
}
Consider if I update the course model,
Update courses set name= 'Astro physics' where id = 2
The expected behavior now the student should have the updated value, but after printing, I’m getting the same result. Why?
Because the student is an in-memory variable, accessing the student doesn’t result in querying the database so it still has the old data.
To resolve this problem, rails provide a function reload which will update the student variable as per the database.
student.reload // this will print
{
id:1,
name: "Bhanu",
courses:[{
id: 2,
name: "Astro physics"
}]
}
Now we get the latest data. So when to use reload?
So whenever there is a change in an object which is an association relationship. we should reload. Here we have a student which is in a has_many relationship with the courses. If there are any indirect changes in courses we should use reload, so reflected changes can be viewed in the student object.
To summarise, to reload model, to reload an activerecord, to reload an association for recent changes we should use this function.