我使用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。我不想收集所有用户然后过滤。
答案 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的运算符。 我认为这看起来更容易阅读和维护。