Когда ActiveRecord выполняет запросы? - PullRequest
0 голосов
/ 08 мая 2018

Меня интересует, когда ActiveRecord запускает свои запросы, потому что я помню, что читал, что Rails оптимизирует запросы, не выполняя их, пока не будут использованы фактические данные, я просто не уверен, как это доказать или найти в документации. Я не могу просто запустить строки в консоли rails, потому что это будет явно запускать запрос, когда я его наберу. Я объясню, что я имею в виду ниже:

@stores = Store.where(active: true)
# Query should not have ran yet

@stores = @stores.includes(:owners)
# Query should not have ran yet

@stores.each { |store| store.do_something }
# So from this point forward, it should run
# Store.includes(:owners).where(active: true) all at once
# or it would have ran 3 queries instead of one.

Как я могу это доказать или кто-то может привести меня к правильной документации?

1 Ответ

0 голосов
/ 08 мая 2018

Хотя я знаю, что Rails откладывает выполнение запросов до тех пор, пока они на самом деле не нужны, я не рассматривал эту часть в документации. Чтобы выяснить, сколько запросов к базе данных выполняется, я использую этот гем под названием db-query-matchers в своих тестах RSpec для экспериментов.

В вашем случае я бы сделал что-то похожее на это:

it 'experiment 1' do
  expect { @stores = Store.where(active: true) }.to make_database_queries(count: 0..3)
end

it 'experiment 2' do
  expect do 
    @stores = Store.where(active: true) 
    @stores = @stores.includes(:owners)
  end.to make_database_queries(count: 0..3)
end

it 'experiment 3' do
  expect do 
    @stores = Store.where(active: true) 
    @stores = @stores.includes(:owners)
    @stores.each { |store| store.do_something }
  end.to make_database_queries(count: 0..3)
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...