.each Заявление на основе вложенных ресурсов - PullRequest
0 голосов
/ 23 января 2020

Я пытаюсь написать .each оператор, основанный на характеристиках c вложенного ресурса. Отношения между таблицами в моем приложении определяются следующим образом:

User has_many Posts
Post belongs_to User
Post belongs_to Category
Category has_many Posts

На странице для данной категории я хочу проиндексировать всех пользователей, у которых есть сообщение в этой категории. Как лучше всего выполнить это? 1014

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

<% User.where(user.post.category == @category).each do |category| %>

Ответы [ 3 ]

1 голос
/ 23 января 2020

В контроллере:

@users = User.joins(:post).where(posts: {category_id: @category.id})

В поле зрения

<% @users.each do |user| %>
  <Your html code>
<% end %>

Всегда держите бизнес-логику c вне поля зрения. Было бы предложено сделать этот запрос в качестве области действия в модели.

In user.rb

scope :post_users, -> (category_id)  {joins(:post).where(posts: {category_id: category_id})}

In controller

@post_users = User.post_users(@category.id)
1 голос
/ 23 января 2020

вы можете искать пользователей с запросом ниже и затем перечислять его

<% @users = User.joins(:posts).where('posts.category_id = ?',@category.id) %>
<% @users.each do |user| %>

примечание: вы можете поместить строку 1 выше в вашем контроллере

0 голосов
/ 23 января 2020

Лучший подход - установить @users в методе контроллера или использовать любой вспомогательный метод , чтобы получить результат в представлении

def your_method ## or any other method
  .....
  .....
  @users = User.joins(:posts).where('posts.category_id = ?',@category.id)
end

И затем в представлении

#your_view.html.erb

<% @users.each do |user| %>
<% end %>
...