查询+活动记录中的多个可选条件

时间:2013-10-29 13:09:15

标签: ruby-on-rails activerecord

我使用rails 3.1.11和mysql。考虑用户(名称,角色,城市)和项目(名称)模型。我想收集来自'Mumbai'的'Pune''manager'中角色为'admin'的用户。

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_of http://two.mongoid.org/docs/querying/criteria.html#any_of。我不想收集所有用户然后过滤。

2 个答案:

答案 0 :(得分:0)

你可以做到

User.where(["(role = ? and location = ?) or (role = ? and location = ?)", 'admin', 'Pune', 'manager', 'Mumbai'])

答案 1 :(得分:0)

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

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

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