活动模型序列化程序不急于加载关系

时间:2017-12-04 21:26:17

标签: ruby-on-rails ruby eager-loading active-model-serializers

我正在使用Bullet gem查看我的应用程序中有n + 1个查询的位置。它告诉我在调用我的序列化程序时急切加载我的关联taggings。我的代码看起来像这样:

render json: @products, each_serializer: ::V1::ProductSerializer, includes: [:taggings], links: links, status: :ok

但是在我添加之后,我仍然从Bullet宝石获得相同的警告。看起来像这样:

GET /api/v1/product_feed?state=CA&page=1
USE eager loading detected
  Product => [:taggings]
  Add to your finder: :includes => [:taggings]
Call stack
  /home/jay/current_projects/api/app/controllers/api/v1/products_controller.rb:111:in `product_feed'

有没有人知道为什么标记表没有被急切加载。

1 个答案:

答案 0 :(得分:4)

您需要先在查询中包含标记,然后序列化程序才能读取已加载的记录,而不是按记录单独请求标记关联记录

@products = Product.includes(:taggings)
render json: @products, each_serializer: ::V1::ProductSerializer, includes: [:taggings], links: links, status: :ok