通过rails的多个条件查找

问题描述:

我想在Rails中搜索具有多个条件的表。我正在使用活动记录和钢轨版本3.1.0。通过rails的多个条件查找

我有电影对象,并希望达到以下的钢轨相当于:

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

我尝试以下,但它不工作

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

能否请您提供帮助写一个上面提到的SQL查询的等价物。

一种方式是与建立一个“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

我想这将是

Movie.where("rating = ? OR rating = ?", 'R', 'PG') 

看看导游的详细信息:http://guides.rubyonrails.org/active_record_querying.html#conditions

我会建议使用IN语句。

可以使用做到这一点:

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

轨道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