Направляющие добавляют пользовательскую нетерпеливую загрузку

У меня есть много пользовательских запросов find_by_sql в направляющих. Я хотел бы использовать нетерпеливую загрузку ими, но там, кажется, не хороший способ сделать это.

Я видел, что eager_custom.rb файл плавает вокруг, и это, кажется, не работает с направляющими теперь. Это появляется, направляющие делают нетерпеливую загрузку по-другому теперь, с помощью 2 запросов (регулярный запрос плюс запрос где 'идентификатор В' идентификаторах от первого запроса), вместо единственного запроса соединения, используемого в прошлом.

Мой вопрос состоит в том, если я делаю пользовательский SQL-запрос, затем 'идентификатор В' запросе, там способ добавить объекты, связанные со спиной в начальные результаты запроса?

Например, мне загрузили темы find_by_sql, затем я нахожу изображения темы, где идентификатор темы находится в идентификаторах тем, существует ли способ добавить изображения вручную назад к темам?

Спасибо

6
задан riley 17 December 2009 в 21:32
поделиться

1 ответ

Как вы заметили, в Rails 2.1 был введен новый вид активной / предварительной загрузки, который использует несколько запросов с id IN (...) . Этот метод обычно быстрее, особенно когда предварительно загружается несколько ассоциаций. Вы можете использовать эту функциональность вручную с find_by_sql , используя метод класса preload_associations , унаследованный от ActiveRecord (не рекомендуется). Например:

class Person
  def self.find_a_special_group
    people = find_by_sql("...")
    preload_associations(people, [:jobs, :addresses])
    return people
  end
end

Метод preload_associations защищен, поэтому вы должны вызывать его изнутри класса, и он принимает (1) массив объектов, (2) массив, хэш или символ ассоциации (тот же формат, что и в find : включить параметр ) и (3) хэш параметров. См. Документацию по ActiveRecord :: AssociationPreload :: Подробнее о модуле ClassMethods

Однако, этот метод определенно нежелателен , поскольку документация Rails отговаривает программистов от использования preload_associations напрямую. Вы уверены, что вам нужно использовать find_by_sql ? Вы уверены, что знаете все возможные варианты find ? (: выберите , : из , : объединяет , : группу , : имеет и т. Д.) I ' Я не говорю, что вам не нужен find_by_sql , но, возможно, потребуется несколько минут, чтобы убедиться в этом.

Вы уверены, что вам нужно использовать find_by_sql ? Вы уверены, что знаете все возможные варианты find ? (: выберите , : из , : объединяет , : группу , : имеет и т. Д.) I ' Я не говорю, что вам не нужен find_by_sql , но, возможно, потребуется несколько минут, чтобы убедиться в этом.

Вы уверены, что вам нужно использовать find_by_sql ? Вы уверены, что знаете все возможные варианты find ? (: выберите , : из , : объединяет , : группу , : имеет и т. Д.) I ' Я не говорю, что вам не нужен find_by_sql , но, возможно, потребуется несколько минут, чтобы убедиться в этом.

10
ответ дан 10 December 2019 в 00:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: