ruby-on-rails - 如何选择对同一关联有两个约束的记录?

标签 ruby-on-rails ruby-on-rails-3 roles

我希望能够选择具有多个角色的用户:

User < ActiveRecord::Base
  has_and_belongs_to_many :roles
end

Role < ActiveRecord::Base
  has_and_belongs_to_many :users
end

我知道如何选择具有两个角色之一的用户:

User.joins(:roles).where(roles: { name: [:admin, :manager] })

但是我如何找到至少具有 :admin 和 :manager 角色的所有用户?

最佳答案

这会起作用:

users = User.joins(:roles)
users.where("roles.name" => "admin") & users.where("roles.name" => "manager")

请注意,这会产生两个 SQL 加载查询,我认为这对于此类搜索来说可能是不可避免的。 (您的替代解决方案还会进行两个 SQL 查询。)另请注意,它返回一个数组而不是 activerecord 关系,这可能不是您想要的。

关于ruby-on-rails - 如何选择对同一关联有两个约束的记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12361112/

相关文章:

ruby-on-rails - Rails 与 websockets : Triggering a controller method on model changes

ruby-on-rails - 使用错误版本的 Ruby 部署 capistrano

PostgreSQL:不允许角色登录

rest - 如何在中间件路由中应用角色

ruby-on-rails - Rails ActiveModel::ForbiddenAttributesError 设计,Omniauth

ruby-on-rails-3 - 具有 pg_search 结果顺序的 Postgresql trigram 文本搜索

ruby-on-rails - 结合 ruby​​ 选择特定语言时如何使用 JavaScript 选择的功能?

ruby-on-rails-3 - Rails 3 中使用 Prototype 而非 jQuery 的 Ajax 回调

mysql - 为什么我的角色无法在我的 MySQL 数据库中发挥作用?

mysql - Rails 查询执行 2 个查询