2010-09-07 5 views

Respuesta

24

Se podía probarlo en el cosole:

 
script/console # rails 2 
rails console # rails 3 

introduzca su código en la consola y se obtiene:

 
irb> result = ActiveRecord::Base.connection.execute("select 'ABC'") 
=> [{0=>"ABC", "'ABC'"=>"ABC"}] 

por lo que se consigue con

result.first[0] 
# or 
result.first['ABC'] 

result.first solo devuelve la primera fila, no el primer valor. Esta fila consta de un Hash con acceso numérico y con nombre.

+1

Gracias jigfox. Para el resultado '[{0 =>" ABC "," 'ABC' "=>" ABC "}]', ¿por qué hay 2 "ABC" s? y, ¿cuál es el significado de '0' y primero' "'ABC'" '? ¿Es uno de ellos un nombre de columna? Como cuando hago la consulta en MySQL Query Browser, el nombre de la columna es 'ABC' y el valor de la primera fila es' ABC'. – ohho

+2

resultado es '# ' en lugar de '[{0 =>" ABC "," 'ABC' "=>" ABC "}]'. ¿Lo que da? – ohho

+0

* "¿por qué hay 2" ABC "s? Y, ¿cuál es el significado de 0 y primero" 'ABC' "?"* Uno es accesible por el número de columna" 1 "y se puede acceder a uno con el nombre de columna" ABC ". – jigfox

19

Probar:

result = ActiveRecord::Base.connection.select_value("select 'ABC'") 

No aconsejaría a jugar un poco con el código base de datos subyacente, si no es necesario

+0

Gracias Shadwell. Doy crédito a la respuesta a jigfox porque estoy buscando la estructura de retorno general a partir de una consulta MySQL, sin limitarme a un valor. Un crédito 'útil' para usted ;-) – ohho

+1

con 500k + registros que realmente no puede hacer, seleccione todo debido a la velocidad. Esta también suele ser la razón por la que las personas tienden a utilizar connection.execute para poder optimizar el SQL que se está procesando. –

19

En lugar de .execute puede usar .select_all, esto devolverá una matriz con el resultado.

a fin de utilizar:

ActiveRecord::Base.connection.select_all("select 'ABC'") 
+1

Esto devuelve un ActiveRecord :: Result. – Donato

0

tengo una tabla con algunos datos donde hay una columna llamada Estado que contiene valores como closed, in progress, etc ..

Así que cuando lo haga el código como: ActiveRecord::Base.connection.select_all "select DISTINCT Status from tickets"

consigo el siguiente:

StatusclosedStatusin progressStatusassignedStatusnewStatussolved

El problema es que el nombre de la columna se agrega antes de cada valor. ¿Cómo obtengo los valores solo?

+1

Resuelto usando 'ActiveRecord :: Base.connection.select_values" seleccione DISTINCT Status from tickets "' Revise este enlace por varios 'connection' methods: http://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/DatabaseStatements.html –

Cuestiones relacionadas