通过rails中的多个条件查找

时间:2012-08-06 14:02:32

标签: ruby-on-rails ruby ruby-on-rails-3 activerecord

我想在Rails中搜索具有多个条件的表。我正在使用Active record和rails 3.1.0版。

我有Movies对象,想要在rails中实现以下等价物:

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

我尝试了以下但不起作用

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

您能否提供帮助以编写上述SQL查询的等效内容。

4 个答案:

答案 0 :(得分:10)

一种方法是使用以下方法构建“IN”条件:

 @filtered = Movie.where(:rating => ['R', 'PG']).all
编辑:我从“电影”中将您的班级改为“电影”。我认为这就是你想要的。

答案 1 :(得分:5)

在Rail 4中,查找多个条件,例如考虑使用Profilefirst_name

查找last_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 Rail 4,查找多个条件,例如考虑使用Profilefirst_name

查找last_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

答案 2 :(得分:4)

我猜那将是

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

查看指南以获取更多信息:http://guides.rubyonrails.org/active_record_querying.html#conditions

我建议改为使用IN语句。

答案 3 :(得分:4)

您可以使用以下方式执行此操作:

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