0

我正在使用带有 mysql 的 rails 3.1.11。考虑一个 User(name, role, city) 和 Project(name) 模型。我想从“Pune”收集具有“admin”角色的用户从“Mumbai”收集具有“manager”角色的用户。

User
has_and_belongs_to_many :projects, uniq: true

Project
has_and_belongs_to_many :users, uniq: true

使用的查询是

users = []
users <<  User.where(role: 'admin', location: 'Pune') 
users <<  User.where(role: 'manager', location: 'Mumbai')
Project.first.users << users

触发2个查询。如何在一次通话中收集上述数据?Mongoid 有类似查询的any_ofhttp://two.mongoid.org/docs/querying/criteria.html#any_of。我不想收集所有用户然后过滤。

4

2 回答 2

0

你可以做

User.where(["(role = ? and location = ?) or (role = ? and location = ?)", 'admin', 'Pune', 'manager', 'Mumbai'])
于 2013-10-29T13:27:53.387 回答
0

如果你使用 squeel gem,你可以做得更好:

User.where{(role = 'admin') & (location = 'Pune') | (role = 'manager') & (location = 'Mumbai')}

花括号表示使用了 squeel,它还提供了 & 和 | AND 和 OR 的运算符。我认为这看起来更容易阅读和维护。

于 2013-10-29T13:32:58.597 回答