有许多通过协会

Has many through association

我有两个具有 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

当我创建仪表板时,我可以选择 select 一个或多个工作区,并且我能够获得具有这样一个工作区的仪表板:

Dashboard.joins(:workspaces).all

我是这样得到 workspaces_ids 的:

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。

有没有一种方法可以在我的控制器中使用查询来完成?

非常感谢您的帮助!

我会假设你的用户模型 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 的仪表板以及 current_user.workspaces 中的任何 workspaces