In this blog we will see how to optimize our rails views by removing multiple queries.
There are many times when we have to show associations in the view. For ex:
class Customer has_many: appointments end class Appointment belongs_to: customer end
Now in the index view of appointments, you want to show customer details (customer name atleast) too. What generally we do:
@appointments = Appointment.all
and then in view for each appointment, we get
Now with this, we do database query for each appointment, which seeds to N+1 query problem.
How to avoid that ?
You can make use of
include and reduce loading problem by great margin.
Now you might be wondering, what if, you want to include nested associations. Well you can achieve that like this:
For all appointments with their respective customer, and customer with their respective address.
or (for multiple nested associations)
Appointment.includes(customer: [:goals, :tips])
Further, you can find out all the N+1 queries in your project, with this amazing gem Bullet
Further read: apidock includes
I hope you like this post. Please comment down below you have doubts/questions or request for any topics. Thanks for reading!