有许多通过协会
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
。
我有两个具有 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
。