10

我想在 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

4 回答 4

13

一种方法是建立一个“IN”条件:

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

编辑:我将您的课程从“电影”更改为“电影”。我想这就是你想要的。

于 2012-08-06T14:07:05.613 回答
10

在 Rail 4 中,使用多个条件进行查找,例如考虑Profile使用first_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 方法

1http ://api.rubyonrails.org/classes/ActiveRecord/FinderMethods.html#method-i-find_byIn Rail 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 方法

于 2016-01-31T07:27:24.583 回答
5

我想那会是

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

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

我建议改用IN语句。

于 2012-08-06T14:06:27.237 回答
5

您可以使用:

Movie.where(:rating => ['R','PG'])
于 2012-08-06T14:07:51.917 回答