#ruby-on-rails #controller #has-many-through
#ruby-on-rails #контроллер #имеет много сквозных
Вопрос:
У меня есть две модели с ассоциацией has_many_through, например:
class Workspace < ActiveRecord::Base
has_many :dashboards_workspaces
has_many :dashboards, through: :dashboards_workspaces
end
class Dashboard < ActiveRecord::Base
has_many :dashboards_workspaces
has_many :workspaces, through: :dashboards_workspace
end
Когда я создаю панель мониторинга, у меня есть возможность выбрать одно или несколько рабочих пространств, и я могу получить панели мониторинга с таким рабочим пространством:
Dashboard.joins(:workspaces).all
И я получаю идентификаторы рабочих пространств таким образом:
foo = Dashboard.find(1)
foo.workspaces.id
Но мне нужно показывать в представлении только панели мониторинга, которые имеют тот же workspace_id, что и текущий пользователь:
@workspaces = Workspace.where(id: current_user.workspaces)
Например:
Workspace.where(id: current_user.workspaces) = [4]
Dashboard.find(1).workspaces.id = [1, 3]
Dashboard.find(2).workspaces.id = [4]
Мне нужно показывать только панель управления 2 в представлении.
Есть ли способ, которым я могу выполнить это, используя запрос в моем контроллере?
Большое вам спасибо за вашу помощь!
Комментарии:
1. было бы полезно, если бы вы также могли поделиться ассоциацией своей пользовательской модели
2. отредактировал мой ответ, чтобы избежать повторных результатов
Ответ №1:
Я предполагаю, что ваша пользовательская модель has_many :workspaces
, если это так, я думаю, вы можете сделать что-то вроде этого:
workspaces_ids = current_user.workspaces.pluck(:id)
dashboards = Dashboard.joins(:workspaces).where(Workspace.arel_table[:id].in(workspaces_ids)).distinct
Вышеизложенное должно оставаться во dashboards
всех панелях мониторинга, которые имеют associations
какую-либо workspaces
внутреннюю current_user.workspaces
часть.
Комментарии:
1. Рад помочь! 👌