Как я могу переместить эту логику в контроллер и есть ли необходимость в этом? - PullRequest
0 голосов
/ 27 апреля 2018

Хорошо, ребята, мне нужно спросить, как я могу переместить это в контроллер

- if UserGroup.where("group_id = ? AND user_id = ?", annoucement.group_id, current_user.id).exists? and annoucement.exp_date >= Date.today

Это часть моего взгляда, и я не знаю, как передать значения от каждого к нему

#Part of index.html.haml

- @annoucements.each do |annoucement|
    - if UserGroup.where("group_id = ? AND user_id = ?", annoucement.group_id, current_user.id).exists? and annoucement.exp_date >= Date.today
      %tr{id: "annoucement_#{annoucement.id}"}
        %td= annoucement.title
        %td= annoucement.description

1 Ответ

0 голосов
/ 28 апреля 2018

Вы абсолютно на правильном пути. Подобная логика не относится к представлению и, возможно, даже к контроллеру. Вы хотите протолкнуть логику «назад», насколько это возможно, в контроллер, возможно, в модель. Логика в представлении - это код запаха: D

Я верю, что вы хотите left_outer_join. Похоже, UserGroup это таблица соединения между пользователями и группами, верно? Если это так, то соглашение об именах будет UsersGroup. Я собираюсь работать над этим предположением. Мой код может не совпадать с тем, что у вас есть, поэтому настройте его по вкусу.

Это использует Rails 5 left_outer_join https://blog.bigbinary.com/2016/03/24/support-for-left-outer-joins-in-rails-5.html

Но то же самое можно сделать до Rails 5, используя joins https://apidock.com/rails/ActiveRecord/QueryMethods/joins

Announcement.left_outer_joins(:users_groups).where(users_groups: { user_id: current_user.id }).uniq

При этом будут получены все объявления с группами пользователей, а затем отфильтрованы их по текущему идентификатору пользователя.

Вы можете поместить это в контроллер и назначить его переменной, или вы можете создать область действия в вашей модели или множество других опций. Удачи!

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