2013-10-29 75 views
0

我使用rails 3.1.11和mysql。考慮一個用戶(名稱,角色,城市)和項目(名稱)模型。我想從'孟買'收集'浦那''經理'角色'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_ofhttp://two.mongoid.org/docs/querying/criteria.html#any_of。我不想收集所有用戶,然後過濾。

回答

0

你可以做

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

我不想在應用程序中使用mysql語法。 –

+0

這不是'MySQL'特定的語法。 –

0

如果使用squeel寶石,可以讓這個更漂亮:

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

大括號信號使用squeel,這也提供了&的和| AND和OR運算符。 我認爲這看起來更容易閱讀和維護。