2011-05-25 24 views
9

Digamos que tengo un modelo, Foo, que es grande y tiene muchos componentes. Para una consulta dada de Ajax, solo estoy interesado en un atributo en particular, bar, que es una columna en la tabla de los foos.Rieles: Cargue solo un atributo, no un modelo completo

¿Hay alguna manera sencilla de cargar solo ese atributo y no molestarme en recuperar el resto del registro? Por ejemplo, si todo lo que quiero saber es la barra para Foo con ID # _ _, ¿cómo podría recuperar eso?

Respuesta

14

Puede volver solamente las columnas específicas llamando al método select con una cadena que contiene el atributo es que quieres regresar Para su ejemplo:

Foo.select('bar').first #<Foo bar: 1> 

Tenga en cuenta que estos objetos actuarán como objetos normales ActiveRecord pero volver nil para cualquier campo no ha seleccionado, así que tenga cuidado el uso de esta funcionalidad.

Puede llamar a seleccionar en sí como de cualquier relación nombre de la clase, por lo que puede encadenar el ActiveRecord llama normalmente utiliza como where, etc.

4

Foo.where(<condition>).select('fieldname')

Ejemplo

results = Foo.where('is_active = ?', true).select('bar')

acceder a los campos seleccionados como:

results.map {|res| res.bar} devuelve una matriz de la barra de

+0

muy difícil solución, prueba este - User.where (: id => user_id) .pluck (: nombre_usuario) .First –

7

Yo prefiero esta

User.where(:id => user_id).pluck(:user_name).first #'tom' 
Foo.where(:age => 23).pluck(:user_name) #['tom', 'jerry', ...] 
Cuestiones relacionadas