2012-04-21 3 views
39

¿Cuál es el camino en los raíles para estructurar la consulta sql para seleccionar solo ciertas columnas de la base de datos? Tengo algunos campos de datos grandes que quiero evitar cargar desde continuas llamadas ajax periódicas . Leer innecesariamente consume mucho tiempo y es lento.Rieles de rubí: seleccione solo algunas columnas de la base de datos

@itemlist = Item.find(:all, :conditions => { .... }) #this select all columns 

Busco SELECT name, address FROM users; en lugar de SELECT * FROM users;

+2

lo general, si usted no necesita/usa otras columnas, usted debe pensar en la normalización de datos. –

Respuesta

93

Rails 3:

Item.select("name, address").where(....)

+0

¡Sí, genial! Promueva esto, muchachos, ya que Rails 3 es mucho más popular que el 2º –

+2

También debe tenerse en cuenta que si tiene más de una tabla en su instrucción 'SELECT' y está haciendo referencia a una columna que podría existir en más de 1 tabla , incluya la tabla en la selección, como 'select ('' items.name, users.address '')'. –

+0

No funciona mientras estoy en la mesa – Chinmay235

2

Prueba esto:

@itemlist = Item.find(:all, :select => "name, address", :conditions => { .... }) 
21

Aprovechar :select constructo. Prueba esto:

@itemlist = Item.select('name, address', conditions: { .... }) 

Para la versión anterior de rieles:

@itemlist = Item.find(:all,:select => 'name, address', :conditions => { .... }) 
+4

Esto ya no es correcto y no es compatible con Rails 4. La respuesta necesita una actualización. – superluminary

+1

La respuesta se ha actualizado después del comentario de superluminary para reflejar la nueva sintaxis .select. –

8

Usando Arel (aka en Rails 3), utilice:

Item.where(...).select("name, address") 

Además, parece .select se tendrá en cuenta si le pega a un alcance que tiene un: incluir => ...

+0

gracias por la ayuda! –

5
@itemlist = Item.select('name, address').where(...#some condition) 
Cuestiones relacionadas