Стремительная загрузка: правильный способ делать вещи

Я использую Ruby on Rails 3.1. Я прочитал следующие статьи и документы онетерпеливая загрузка и я хотел бы найти правильный способ сделать вещи:

Стремительная Загрузка Ассоциаций [Официальная документация]ActiveRecord :: Ассоциации :: методы класса (см. раздел «Стремительная загрузка ассоциаций») [Официальная документация]Нетерпеливая загрузка [Блог статьи]

# 2 говорит:

Обратите внимание, что при использовании таких условий, какPost.includes ([: author,: comments]). Where (['comments.approved =?', True]). All может иметь непредвиденные последствия.

# 3 говорит, что эти непредвиденные последствия (нота: примеры практически одинаковы, поэтому я цитирую точный текст статьи в блоге, но вы должны помнить об обходном пути, а не о конкретной реализации):

Этот запрос, поскольку он будет использовать LEFT JOIN, также отбрасывает все сообщения без комментариев со словом «first» в любом из его комментариев.

То есть, если есть не «связанные» объекты, «основной связанный» объект не будет загружен. Это то, что происходит, когда я пытаюсь использовать готовую загрузкудобавив некоторые условия любить.where(:category_relationships => {:user_id => @current_user.id}) в моемпредыдущий вопросНо я не хочу, чтобы это произошло.

Итак (пораженец, потому что я, вероятно, не могу использовать энергичную загрузку в моем случае, когдаусловие не может быть установлен вhas_many утверждение - обратите внимание, что в приведенном выше коде@current_user.id «устанавливается динамически» в отличие от примеров, представленных на упомянутых сайтах),Я хотел бы знать, существуют ли методики / методы / стратегии для ограничения запросов к базе данных, так как у меня «проблема N + 1».

Может быть, эти практики / методы / стратегии могут быть реализованы с помощью инфраструктуры Ruby on Rails вообще ...# 1 говорит:

Несмотря на то, что Active Record позволяет вам задавать условия для загруженных ассоциаций точно так же, как и для объединений, рекомендуется вместо этого использовать объединения.

Что и как правильно решить эту проблему?

Возможно, решение состоит в том, чтобы извлекать и создавать самостоятельно то, что должно быть загружено, выполняя определенные и отдельные запросы к базе данных, но тогда проблема будеткак «передать» / «связать» / «интерполировать» те извлеченные «связанные» объекты в «основной связанный» объект, чтобы их можно было использовать «более загруженной» способом? То есть, как сделать возможным (см.упомянутый вопрос для получения дополнительной информации) использовать код как@article.comments и получать только те комментарии, которые я сам загружал? Послемой нетерпеливая загрузка, этовозможно / верный сделать что-то вроде@article.comments = my_eager_loaded_comments так "пропустить" / "связать" / "интерполировать" комментарии к статьям?

Ответы на вопрос(2)

Ваш ответ на вопрос