Optimize Views in Rails

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

appointment.customer.name

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.

Appointment.includes(:customer)

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.

Appointment.includes(customer: :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!