Skip to content
Advertisement

How to avoid rails as_json creating flood of database requests

I have a model questions that has many tags through another model question_tags. I am trying to write an api endpoint that returns a list of questions and for each question a list of it’s related tag’s name and id.

I’m currently using;

render json: @questions.as_json(include: {
                                      tags: { only: %i[id name] }
                                    })

But this runs a separate db request for every question in questions is there an alternative that will result in a smaller number of database requests?

Advertisement

Answer

The standard N+1 queries fixes should work here, which in Rails is eager loading.

In this case you can use include to preload the associated tags:

render json: @questions.includes(:tags).as_json(
  include: {
    tags: { only: %i[id name] }
  }
)

You can read more about this in the dedicated rails guide section: Eager Loading Associations

User contributions licensed under: CC BY-SA
2 People found this is helpful
Advertisement