我有以下模特:
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_id
,role_id
,{{1}})。
有什么建议吗?
答案 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