Rails включает в себя действительно улучшить запросы? (с пулей) - PullRequest
0 голосов
/ 23 января 2019
# Models
class Cinema < ApplicationRecord
  has_many :showtimes
  has_many :movies,         -> { distinct }, through: :showtimes
end

class Movie < ApplicationRecord
  has_many :showtimes
  has_many :cinemas,         -> { distinct }, through: :showtimes
end

class Showtime < ApplicationRecord
  belongs_to :cinema
  belongs_to :movie
end

# Controller
class V1::MoviesController < ApplicationController
  movie = Movie.find(params[:id])
  render json: MovieSerializer.new(movie, include: [..., :cinemas, :'cinemas.showtimes']).serialized_json
end

# Serializers
class MovieSerializer
  include FastJsonapi::ObjectSerializer
  # Relations
  ...
  has_many :cinemas, serializer: CinemaItemSerializer do |object|
    object.cinemas.by_country('FR') #.includes(:showtimes)
  end
end

class CinemaItemSerializer
  include FastJsonapi::ObjectSerializer
  # Relations
  has_many :showtimes
end

Я использую гем bullet для запуска n + 1 запросов и fast_json_api для сериализации моих объектов.

Когда я не использую includes(:showtimes) у меня есть это время ответа enter image description here

Если я использую includes, у меня есть это время ответа enter image description here

Как вы видите, когда я не использую includes, мой запрос медленнее, но общее время ответа намного быстрее.

Так какой же я должен использовать?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...