В приложении Rails 2.3.5 я получил что-то вроде следующих моделей:Оптимизация Rails нетерпеливый запрос погрузочные найти все
class Foo < ActiveRecord::Base
has_many :bars
end
class Bar < ActiveRecord::Base
belongs_to :foo
end
И когда я звоню
Foo.all(:include => :bars)
я вижу в консоли:
SELECT * FROM "foos"
SELECT "bars".* FROM "bars" WHERE ("bars".foo_id IN (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21))
со всеми идентификаторами foo в предложении where.
Я думаю, что это не оптимальный запрос, в то время как число идентификаторов может быть большим, и мне нужно предварительно загрузить все «бары». Кроме того, на самом деле у меня нет двух моделей, но их цепочки.
Есть ли способ, чтобы сделать запрос жадной загрузки быть как
SELECT "bars".* FROM "bars"
, когда я использую найти все?
Посмотрите здесь, а http://akitaonrails.com/2008/5/26/rolling-with-rails-2-1-the-first- full-tutorial-part-2 в разделе «Оптимизированная нетерпеливая загрузка» – khelll
Спасибо, knoopx! Мне пришло в голову, что в нетерпеливой загрузке не должно быть известно, загружаю ли я все строки таблицы, или все foo соответствуют некоторому условию (таким образом, предложение WHERE будет включать в себя не все идентификаторы foo.) Я теперь пытаясь найти, где Rails изменяет стратегию запросов, если число id достигает высокой степени любопытства. khelll, спасибо за ссылку, как хорошо! – khustochka