2012-08-06 8 views
6

Quiero buscar una tabla con múltiples condiciones en Rieles. Estoy usando Active record and carriles versión 3.1.0.Encontrar por condiciones múltiples en rieles

que tienen objeto Películas y quieren lograr el equivalente a lo siguiente en rieles:

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

He intentado lo siguiente pero no funciona

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

¿Puede usted proporcionar por favor ayuda a escribe un equivalente de consulta SQL mencionado anteriormente.

Respuesta

10

Una forma podría ser la construcción de una condición de "IN" con:

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

EDIT: He cambiado su clase para "Película" de "Películas". Supongo que eso es lo que querrás.

+0

'.all' no es necesario. – Mischa

+0

@Mischa - Muy cierto, pero eso por supuesto dependerá de dónde y cómo uno esté usando la declaración, y estoy de acuerdo en la mayoría de los casos que no es necesario. Para esta respuesta, quería devolver explícitamente la matriz resultante y no un objeto ActiveRecord :: Relation para evitar cualquier posible confusión. ¡Gracias por señalar eso! – miked

+0

Creo que parece extraño llamar 'all' cuando * no * quiere todo. Si solo lo está haciendo para devolver una matriz en lugar de una 'ActiveRecord :: Relation', sería IMO más claro que simplemente llamar a' to_a' en su lugar. – Mischa

4

Puede hacerlo utilizando:

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

En Trenes 4, encontrará con varias condiciones, por ejemplo, considere la posibilidad de encontrar Profile con first_name y last_name

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

encuentra el primer registro que coincida con las condiciones especificadas. No hay ordenamiento implícito, por lo que si el orden es importante, debe especificarlo usted mismo. Si no se encuentra ningún registro, devuelve nil

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

Como find_by, excepto que si no se encuentra ningún registro activa un error ActiveRecord :: RecordNotFound.

Para obtener más información, lea Rails Finder Method

1: http://api.rubyonrails.org/classes/ActiveRecord/FinderMethods.html#method-i-find_byIn Carril 4, encontrará con varias condiciones, por ejemplo, considere encontrar Profile con first_name y last_name

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

encuentra el primer registro que coincida con las condiciones especificadas. No hay ordenamiento implícito, por lo que si el orden es importante, debe especificarlo usted mismo. Si no se encuentra ningún registro, devuelve nil

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

Como find_by, excepto que si no se encuentra ningún registro activa un error ActiveRecord :: RecordNotFound.

Para obtener más información, lea Rails Finder Method

Cuestiones relacionadas