Pregunta ActiveRecord encuentra y solo devuelve columnas seleccionadas


editar 2

Si te tropiezas con esto, comprueba ambas respuestas, ya que ahora usaré el pluck para esto


Tengo un conjunto de datos personalizado bastante grande que me gustaría volver a contar como json. Una parte es:

l=Location.find(row.id)
tmp[row.id]=l

pero me gustaría hacer algo como:

l=Location.find(row.id).select("name, website, city")
tmp[row.id]=l

pero esto no parece estar funcionando. ¿Cómo conseguiría que esto funcione?

Gracias

editar 1
alternativamente, ¿hay alguna forma de que pueda pasar una serie de solo los atributos que quiero incluir?


75
2017-10-27 02:09


origen


Respuestas:


En Rails 2

l = Location.find(:id => id, :select => "name, website, city", :limit => 1)

...o...

l = Location.find_by_sql(:conditions => ["SELECT name, website, city FROM locations WHERE id = ? LIMIT 1", id])

Este documento de referencia le brinda la lista completa de opciones que puede usar con .find, incluyendo cómo limitar por número, id o cualquier otra columna / restricción arbitraria.

En Rails 3 con la interfaz de consulta ActiveRecord

l = Location.where(["id = ?", id]).select("name, website, city").first

Árbitro: Interfaz de consulta de registros activos

También puede cambiar el orden de estas llamadas encadenadas, haciendo .select(...).where(...).first - todas estas llamadas hacen es construir la consulta SQL y luego enviarla.


77
2017-10-27 02:12



desplumar (column_name)

Este método está diseñado para realizar selecciones por una sola columna como consulta SQL directa. Devuelve una matriz con valores del nombre de columna especificado. Los valores tienen el mismo tipo de datos que la columna.

Ejemplos:

Person.pluck(:id) # SELECT people.id FROM people
Person.uniq.pluck(:role) # SELECT DISTINCT role FROM people
Person.where(:confirmed => true).limit(5).pluck(:id)

ver http://api.rubyonrails.org/classes/ActiveRecord/Calculations.html#method-i-pluck

Se introdujeron los rieles 3.2 en adelante y solo acepta una sola columna. En los rieles 4, acepta múltiples columnas


185
2017-10-11 16:30



Mi respuesta llega bastante tarde porque soy un desarrollador bastante nuevo. Creo que lo que mi amigo estaba buscando es esto:

Location.select(:name, :website, :city).find(row.id)

Por cierto, esto es Carriles 4


7
2017-07-07 16:43