2012-08-06 79 views
6

我想在Rails中搜索具有多個條件的表。我正在使用活動記錄和鋼軌版本3.1.0。通過rails的多個條件查找

我有電影對象,並希望達到以下的鋼軌相當於:

Select * from Movies where rating = 'R' OR rating = 'PG' 

我嘗試以下,但它不工作

@filtered = Movies.find(:all, :conditions => { :rating => 'R', :rating => 'PG' }) 

能否請您提供幫助寫一個上面提到的SQL查詢的等價物。

回答

10

一種方式是與建立一個「IN」的條件:

@filtered = Movie.where(:rating => ['R', 'PG']).all 

編輯:我從「電影」改變了你的類「電影」。我想這就是你想要的。

+0

'.all'沒有必要。 – Mischa 2012-08-06 14:12:39

+0

@Mischa - 非常真實,但這當然取決於某人在何處以及如何使用該陳述,並且我同意在大多數情況下這不是必需的。對於這個答案,我想明確地返回結果數組而不是ActiveRecord :: Relation對象,以避免任何可能的混淆。感謝您指出,雖然! – miked 2012-08-06 14:24:29

+0

我只是覺得當你*不需要全部時,調用'all'看起來很奇怪。如果你只是爲了返回一個數組而不是'ActiveRecord :: Relation',那麼IMO會清楚地調用'to_a'來代替。 – Mischa 2012-08-06 14:34:33

4

可以使用做到這一點:

Movie.where(:rating => ['R','PG']) 
4

軌道4,與例如多個條件找到考慮找Profilefirst_namelast_name

Profile.find_by first_name: 'stack', last_name: 'flow' 

找到的第一個記錄符合指定條件。沒有暗示的順序,所以如果訂單很重要,你應該自己指定。 如果沒有找到記錄,返回nil

Profile.find_by! first_name: 'stack', last_name: 'flow' 

像find_by,但如果沒有記錄被發現,引起了一個ActiveRecord :: RecordNotFound錯誤。

欲瞭解更多信息,請閱讀Rails Finder Method

1http://api.rubyonrails.org/classes/ActiveRecord/FinderMethods.html#method-i-find_byIn軌道4,與多個條件查找例如,考慮找到Profilefirst_namelast_name

Profile.find_by first_name: 'stack', last_name: 'flow' 

找到的第一個記錄符合指定條件。沒有暗示的順序,所以如果訂單很重要,你應該自己指定。 如果沒有找到記錄,返回nil

Profile.find_by! first_name: 'stack', last_name: 'flow' 

像find_by,但如果沒有記錄被發現,引起了一個ActiveRecord :: RecordNotFound錯誤。

欲瞭解更多信息,請閱讀Rails Finder Method