2012-03-10 18 views
39

en mi aplicación tengo usuarios de diferentes países y desea realizar hallazgos sobre ellosRieles: Encuentra todos con condiciones

Traté de hacerlo de esta manera en la acción index

@fromcanada = User.find(:all, :country => 'canada') 

pero me dio el error

Unknown key: country 

Sin embargo, por lo que me lleva a preguntar, ¿qué puede convertirse en una clave? En mi archivo de esquema de base de datos, tengo una columna "país" en la tabla de usuarios.

t.string "country" 

Además, cuando hice una encuentra toda

@users = User.all 

yo era capaz de hacer esto

<%= user.country %></p> 

¿Puede explicar por qué mi hallazgo todas con condiciones no funcionó? y muéstrame cómo debería haberlo hecho?

+1

¿Qué versión de Rails estás usando? – James

+3

'@fromcanada = User.where (: country => 'canada'). All' probablemente sea un mejor estilo. –

+0

@muistooshort ¿por qué llamar a 'todo' es necesario? Cuando llamas a 'User.all' obtienes todos los usuarios pero no entiendo el significado cuando filtras a los usuarios con' where' (perdón por la pregunta de novato) –

Respuesta

67

Pruebe esto.

@fromcanada = User.find(:all, :conditions => { :country => 'canada' }) 

edición: Como jason328 señaló, la respuesta anterior está en desuso en 3.2, y una respuesta actualizada sería

@fromcanada = User.where(:country => 'canada') 
30

En caso de que nadie leer los comentarios. Un mejor formato sería

@fromcanada = User.where(country: 'canada').all 

El código de la respuesta anterior está en desuso en 3.2.

Y para aquellos que usan Rails 4, será suficiente eliminar el método all.

@fromcanada = User.where(country: 'canada').to_a 

Tenga en cuenta que la to_a llama a la consulta en un formato de matriz.

+3

Este uso de Relación # todo está en desuso en los rieles 4. Si quieres a la carga ansiosa, simplemente reemplace 'all' con' load'. De lo contrario, ni siquiera necesitas el 'todo'. Tu respuesta no es incorrecta Solo estoy esperando los rieles 4. – courtsimas

Cuestiones relacionadas