Как избежать того, чтобы запрос по связанным моделям запускался дважды (Rails)? - PullRequest
0 голосов
/ 13 апреля 2019
Schema: User
id
name string(255)

Schema: Post
id
user_id
title string(255)

В контроллере я запрашиваю User, который имеет has_many отношение к Post Это то, что я делаю в контроллере

@users = User.posts.where('title = ?','April Contest').group(:id)

Теперь в файле представления я перебираю @users.Для каждого user мне нужно получать сообщения, которые удовлетворяют заголовку = 'Апрельский конкурс'.Для того, чтобы это произошло, похоже, мне нужно снова запросить.

Вот что я делаю в виду:

@users.each do |user|
  A LOT OF  HTML THAT DISPLAYS DATA OF USER
 user.posts.where('title = ?','April Contest').each do |post|
    SOME HTML THAT DISPLAYS DATA OF POST
 end
end

Пожалуйста, помогите мне избежать этого user.posts.where('title = ?','April Contest') в представлениифайл

Ответы [ 2 ]

1 голос
/ 15 апреля 2019

Попробуйте использовать eager_load

@users = User.eager_load(:posts).where("posts.title = ?",'April Contest')

Eager_load загружает все ассоциации в одном запросе, используя LEFT OUTER JOIN.

Теперь вы сможете получать доступ к сообщениям бездополнительный запрос

1 голос
/ 14 апреля 2019

Попробуйте это

Сначала получите пользователей, включая сообщения, где title = 'April Contest'

@users = User.includes(:posts).where("posts.title = ?",'April Contest').references(:post)

Теперь вы можете выполнять итерацию, используя @users и получать сообщения от user.posts

@users.each do |user|
  A LOT OF  HTML THAT DISPLAYS DATA OF USER
 user.posts.each do |post|
    SOME HTML THAT DISPLAYS DATA OF POST
 end
end

Это позволит избежать повторного выполнения запроса в поле зрения. Попробуйте это и дайте мне знать

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