Я полагаю, это потому, что команда LIMIT
в sql плохо переводит то, что вы пытаетесь сделать.LIMIT
ограничит общее количество строк, возвращаемых запросом.Вы не пытаетесь сделать это все же.Вы пытаетесь ограничить количество строк, соединяемых для каждого возвращаемого изображения.Чтобы достичь этого эффекта, вам придется использовать сложный SQL, который может быть трудно оптимизировать, если ваши таблицы большие.В этот момент я хотел бы рассмотреть, почему вы пытаетесь ограничить количество загружаемых строк.
Если максимальное количество загружаемых комментариев является управляемым (<2000 или около того), вам, вероятно, не стоит беспокоиться об ограничении SQLend. </p>
Если вы загружаете только 10 сообщений, я бы не стал загружать их вообще.Я не ожидал бы, что дополнительные 10 запросов сильно замедлят ситуацию, и сколько времени они добавят, вы можете наверстать упущенное, попробовав другие методы оптимизации, такие как кэширование.
Вы должны позволить сферам делать грязную работу за вас, а не за общение.Это способствует повторному использованию, ремонтопригодности, удобочитаемости.Пример:
Class Picture < ActiveRecord::Base
has_many :comments, :order => 'id DESC' do
def recent
limit(10)
end
end
end
Таким образом, .comments
существует, когда вам это нужно, и вы также можете ограничить его следующим образом:
@picture.comments.recent