2012-08-06 17 views
6

Voglio cercare una tabella con più condizioni in Rails. Sto usando Active record and rails versione 3.1.0.Trova in base a più condizioni nei binari

I film in oggetto, e vogliono ottenere l'equivalente di quanto segue in rotaie:

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

Ho provato quanto segue ma non funziona

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

Si può fornire aiuto per scrivere un equivalente della query SQL sopra menzionata.

risposta

10

Un modo sarebbe quello di costruire una condizione di "IN" con:

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

EDIT: ho cambiato la classe a "film" da "Movies". Presumo che sia quello che vorrai.

+0

'.all' non è necessario. – Mischa

+0

@Mischa - Molto vero, ma ciò dipenderebbe naturalmente da dove e come si sta usando l'affermazione, e sono d'accordo nella maggior parte dei casi non è necessario. Per questa risposta, ho voluto restituire esplicitamente l'array risultante e non un oggetto ActiveRecord :: Relation per evitare ogni possibile confusione. Grazie per averlo fatto notare! – miked

+0

Penso solo che sembra strano chiamare 'all' quando * non * vuole tutto. Se lo fai solo per restituire un array invece di un 'ActiveRecord :: Relation', sarebbe più chiaro chiamare semplicemente to_a'. – Mischa

4

È possibile farlo utilizzando:

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

In rotaia 4, trovare con più condizioni per esempio si consideri trovare Profile con first_name e last_name

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

trova il primo record corrispondente alle condizioni specificate. Non vi è alcun ordine implicito, quindi se l'ordine è importante, devi specificarlo tu stesso. Se non viene trovata alcuna traccia, restituisce nil

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

Come find_by, tranne che se non viene trovata alcuna registrazione, genera un errore ActiveRecord :: RecordNotFound.

Per ulteriori informazioni leggere Rails Finder Method

1: http://api.rubyonrails.org/classes/ActiveRecord/FinderMethods.html#method-i-find_byIn rotaia 4, trovare con più condizioni, ad esempio in considerazione trovare Profile con first_name e last_name

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

trova il primo record corrispondente alle condizioni specificate. Non vi è alcun ordine implicito, quindi se l'ordine è importante, devi specificarlo tu stesso. Se non viene trovata alcuna traccia, restituisce nil

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

Come find_by, tranne che se non viene trovata alcuna registrazione, genera un errore ActiveRecord :: RecordNotFound.

Per ulteriori informazioni leggere Rails Finder Method

Problemi correlati