I can\'t figure out how to user the .where()
method to retrieve associated model data. In this example, Projects belongs_to Users...
class Project &
The user
object is not part of the project
object, so you won't be able to view it on the project: rather, by saying Project.includes(:user)
, you're telling Rails to eager-load the referenced association when it finds the project. This saves you a database call down the road. For example, non-eagerly:
@project = Project.where(id: params[:id]).first # one database call, fetching the project
@project.user # another database call, fetching the user
And eagerly:
@project = Project.includes(:user).where(id: params[:id]).first # one database call, fetching both project and user
@project.user # no database interaction
This matters more with has_many
queries where eager-loading associations can save N+1 database queries.
You can verify this is working appropriately by calling @project.user
at some point after the eager load and checking your logs: you should see that there was no database call at that point.