Сокращение 1001 запроса на 2 в Ruby on Rails - но не можете? - PullRequest
1 голос
/ 04 апреля 2011

Иногда вы знаете, что у вас есть 1000 записей Foo, и каждая из них должна получить доступ к foo.bar, где bar - другая модель, тогда будет еще 1000 запросов ...

Я думал, чтоВ следующей строке для 1000 записей

@foos = Foo.find(:all, :include => :bar)

использовался для преобразования этого запроса в 1 в какой-то ранней версии Rails (путем объединения таблиц), но я не знаю, почему в книге Rails 2 Foundation говорится, что этодалее оптимизирован на 2 запроса (почему 2 запроса лучше, чем 1?):

SELECT "foos".* FROM "foos"
SELECT "bars".* FROM "bars" WHERE ("bars"."name" IN ('0001','0002', ... ))

, но я не знаю, почему в представлении, когда я распечатываю foo.bar.title, он по-прежнему вызывает 1 запросна строку, как видно в журнале консоли, поэтому все равно выполняется 1002 запроса.Я думал, что как-то должно быть 2 запроса и все?

1 Ответ

0 голосов
/ 04 апреля 2011

Это выглядит странно ...

@foos = Foo.find(:all, :include => :bar)

тогда ваш код должен быть:

@foos.each do |foo|
  foo.bar.title
end

Первый закон Деметры гласит, что в вашем классе foo должен быть метод bar_title

@foos.each do |foo|
  foo.bar_title
end

Последнее, пожалуйста, опубликуйте пару запросов, которые вы видите в консоли. это подсказка, которая решит, почему это происходит.

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