Rails 4从具有特定角色的工作区中选择用户的一个查询(has_many through)

时间:2014-09-25 08:46:28

标签: sql ruby-on-rails ruby performance

我有以下模特:

class Workspace < ActiveRecord::Base
...
  has_many :workspaces_memberships, :dependent => :destroy
  has_many :users, :through => :workspaces_memberships
  has_many :roles, :through => :workspaces_memberships
...
end

class WorkspacesMembership < ActiveRecord::Base
  belongs_to :user
  belongs_to :workspace, touch: true
  belongs_to :role
...
end

我想从all users中选择workspace admin,他们有role_id 1 Role,但在WorkspacesMembership中按名称进行搜索会很棒在一个查询中(在user_id模型中我有workspace_idrole_id,{{1}})。

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

试试这个:

Workspace.joins(:roles).where('roles.name = ?', "admin")

答案 1 :(得分:0)

我会试试这个:

Workspace.joins(:roles).merge(Role.where(:name=>"admin"))

join和include with merge对于复杂的请求非常强大。

检查您是否需要INNER JOIN(加入)或LEFT OUTER JOIN(包含)。

编辑:正如苏里亚指出的那样,我误读了这个问题。

以下是获取workspace_instance的所有管理员用户的查询:

workspace_instance.users.joins(:roles).merge(Role.where(:name=>"admin"))

这意味着用户有has_many :roles, :through => :workspaces_memberships