问题描述
我有两个具有 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
我是通过这种方式获取 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
内的任何 workspaces
的仪表板留在 current_user.workspaces
中。