2012-08-06 13 views
6

複数の条件を持つテーブルをRailsで検索したい。私はアクティブレコードとレールバージョン3.1.0を使用しています。複数の条件でレールを見つける

私は作品オブジェクト、およびレールに次の同等を達成したいしている:

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

私は次のことを試してみましたが、それは

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

あなたに助けを提供してくださいできますが動作しません。上記のSQLクエリと同等のものを記述します。

答えて

10

一つの方法は、と「IN」の状態を構築することです私は、「作品」から「ムービー」へのあなたのクラスを変更しました。私はそれがあなたが望むだろうと仮定します。

+0

「.all」は不要です。 – Mischa

+0

@ミッチャ - 非常に真実ですが、もちろんそれはどこでどのように使用されているかに依存します。ほとんどの場合、私は同意する必要はありません。この答えでは、混乱を避けるために、結果の配列を明示的に返し、ActiveRecord :: Relationオブジェクトは返さないことを希望しました。しかし、それを指摘してくれてありがとう! – miked

+0

私はあなたが*すべてを望んでいないときに、 'all'を呼び出すのは奇妙に思えます。 'ActiveRecord :: Relation'の代わりに配列を返すようにしているのであれば、IMOは代わりに' to_a'を呼び出すだけです。 – Mischa

4

あなたは使用してそれを行うことができます、レール4に

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

を例えば複数の条件を見つける考えるfirst_nameProfilelast_name

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

を見つける指定した条件に一致する最初のレコードを検索します。暗示的な発注はありませんので、発注が重要な場合は、自分で指定する必要があります。 レコードが見つからない場合は、find_by同様

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

nilを返し、レコードが見つからない場合ことを除いて、ActiveRecordの:: RecordNotFoundエラーを発生させます。詳細について

Rails Finder Method

1を読み取る:http://api.rubyonrails.org/classes/ActiveRecord/FinderMethods.html#method-i-find_byInレール4は、例えば、複数の条件で検索検討first_nameProfilelast_name

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

を検索指定した条件に一致する最初のレコードを検索します。暗示的な発注はありませんので、発注が重要な場合は、自分で指定する必要があります。 レコードが見つからない場合は、find_by同様

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

nilを返し、レコードが見つからない場合ことを除いて、ActiveRecordの:: RecordNotFoundエラーを発生させます。

詳細については、Rails Finder Method

関連する問題