Вы абсолютно на правильном пути. Подобная логика не относится к представлению и, возможно, даже к контроллеру. Вы хотите протолкнуть логику «назад», насколько это возможно, в контроллер, возможно, в модель. Логика в представлении - это код запаха: 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
При этом будут получены все объявления с группами пользователей, а затем отфильтрованы их по текущему идентификатору пользователя.
Вы можете поместить это в контроллер и назначить его переменной, или вы можете создать область действия в вашей модели или множество других опций. Удачи!