通过rails中的多个条件查找

18b*_*tes 7 ruby activerecord ruby-on-rails ruby-on-rails-3

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

我有Movies对象,并希望在rails中实现以下等效:

Select * from Movies where rating = 'R' OR rating = 'PG'
Run Code Online (Sandbox Code Playgroud)

我尝试了以下但它不起作用

@filtered = Movies.find(:all, :conditions => { :rating => 'R', :rating => 'PG' })
Run Code Online (Sandbox Code Playgroud)

您能否提供帮助来编写上面提到的SQL查询等价物.

mik*_*ked 11

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

 @filtered = Movie.where(:rating => ['R', 'PG']).all
Run Code Online (Sandbox Code Playgroud)

编辑:我从"电影"中将你的课程改为"电影".我认为这就是你想要的.


Dee*_*bur 6

在Rail 4中,找到多个条件,例如考虑Profile使用first_name和查找last_name

Profile.find_by first_name: 'stack', last_name: 'flow' 
Run Code Online (Sandbox Code Playgroud)

查找与指定条件匹配的第一条记录.没有隐含的订单,所以如果订单很重要,您应该自己指定.如果未找到记录,则返回nil

Profile.find_by! first_name: 'stack', last_name: 'flow'
Run Code Online (Sandbox Code Playgroud)

与find_by一样,除非找不到记录,否则会引发ActiveRecord :: RecordNotFound错误.

有关更多信息,请阅读 Rails Finder方法

1:http://api.rubyonrails.org/classes/ActiveRecord/FinderMethods.html#method-i-find_byIn铁4,找到多个条件,例如考虑找到Profilefirst_namelast_name

Profile.find_by first_name: 'stack', last_name: 'flow' 
Run Code Online (Sandbox Code Playgroud)

查找与指定条件匹配的第一条记录.没有隐含的订单,所以如果订单很重要,您应该自己指定.如果未找到记录,则返回nil

Profile.find_by! first_name: 'stack', last_name: 'flow'
Run Code Online (Sandbox Code Playgroud)

与find_by一样,除非找不到记录,否则会引发ActiveRecord :: RecordNotFound错误.

有关更多信息,请阅读 Rails Finder方法


pho*_*oet 5

我想那是

Movie.where("rating = ? OR rating = ?", 'R', 'PG')
Run Code Online (Sandbox Code Playgroud)

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

我建议改用一条IN语句。


rah*_*uro 5

您可以使用:

Movie.where(:rating => ['R','PG'])
Run Code Online (Sandbox Code Playgroud)