2012-08-06 18 views
6

Ich möchte eine Tabelle mit mehreren Bedingungen in Rails suchen. Ich verwende Active Record und Rails Version 3.1.0.Suche nach mehreren Bedingungen in Schienen

Ich habe Filme Objekt, und wollen das Äquivalent der folgenden in Schienen erreichen:

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

ich folgendes versucht, aber es nicht

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

Können Sie bitte Hilfe funktioniert auf schreibe ein Äquivalent der oben erwähnten SQL-Abfrage.

Antwort

10

Eine Möglichkeit wäre, mit einem "IN" Zustand zu bauen:

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

EDIT: Ich änderte Ihre Klasse "Movie" von "Movies". Ich nehme an, dass du das willst.

+0

'.all' nicht notwendig ist. – Mischa

+0

@Mischa - Sehr wahr, aber das hängt natürlich davon ab, wo und wie man die Aussage verwendet, und ich stimme zu, dass es in den meisten Fällen nicht notwendig ist. Für diese Antwort wollte ich explizit das resultierende Array und kein ActiveRecord :: Relation-Objekt zurückgeben, um mögliche Verwirrung zu vermeiden. Danke, dass du das gezeigt hast! – miked

+0

Ich denke nur, es sieht komisch aus, 'all' zu nennen, wenn du * nicht alle willst. Wenn Sie es nur tun, um ein Array anstelle einer 'ActiveRecord :: Relation' zurückzugeben, wäre IMO klarer, stattdessen' to_a' zu nennen. – Mischa

4

Sie können es mit:

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

In Schiene 4, mit mehreren Bedingungen zum Beispiel finden erwägen finden Profile mit first_name und last_name

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

den ersten Datensatz Findet die festgelegten Bedingungen entsprechen. Es gibt keine implizite Bestellung, also wenn die Bestellung wichtig ist, sollten Sie sie selbst angeben. Wenn kein Datensatz gefunden wird, gibt nil

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

Wie find_by, mit der Ausnahme, dass, wenn kein Datensatz gefunden wird, wirft eine Activerecord :: RecordNotFound Fehler.

Für weitere Informationen lesen Rails Finder Method

1: http://api.rubyonrails.org/classes/ActiveRecord/FinderMethods.html#method-i-find_byIn Schiene 4, finden mit mehreren Bedingungen zum Beispiel prüfen, finden Profile mit first_name und last_name

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

den ersten Datensatz Findet die festgelegten Bedingungen entsprechen. Es gibt keine implizite Bestellung, also wenn die Bestellung wichtig ist, sollten Sie sie selbst angeben. Wenn kein Datensatz gefunden wird, gibt nil

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

Wie find_by, mit der Ausnahme, dass, wenn kein Datensatz gefunden wird, wirft eine Activerecord :: RecordNotFound Fehler.

Für weitere Informationen lesen Rails Finder Method