Rails: ¿Cómo enumerar las tablas / objetos de la base de datos usando la consola de Rails?

148

Me preguntaba si podría enumerar / examinar qué bases de datos / objetos están disponibles para usted en la consola de Rails. Sé que puedes verlos usando otras herramientas, solo tengo curiosidad. Gracias.

rtfminc
fuente
2
Eso es lo que la escritura / dbconsole es porque aunque
hgmnz
Sí, eso te deja en mysql (o lo que sea). Por alguna extraña razón, quiero enumerar columnas / tablas, etc. desde la consola normal. Estoy pensando que podría requerir métodos de rubí personalizados para hacer tal cosa.
rtfminc

Respuestas:

305

Probablemente estés buscando:

ActiveRecord::Base.connection.tables

y

ActiveRecord::Base.connection.columns('projects').map(&:name)

Probablemente deberías envolverlos en una sintaxis más corta dentro de tu .irbrc.

cwninja
fuente
3
Gracias, el primero funciona como quiero. Pero el segundo no: buscó algo similar pero sin suerte.
rtfminc
12
ActiveRecord :: Base.connection.columns ("foos") también debería funcionar, pero devuelve objetos de columna, .map {| c | [c.name, c.type]} al final corrige eso.
cwninja
27
table_structureparece ser específico para el adaptador sqlite.
Kelvin
44
Para Rails4 use Model.column_names para enumerar las columnas de la tabla
Stephen Provis
44
También en Rails 4, puede usar ModelName para obtener una lista de las columnas y sus tipos de datos.
themattkellyshow
20

Espero que mi respuesta tardía pueda ser de alguna ayuda.
Esto irá a la consola de la base de datos rails.

rails db

bastante imprimir su salida de consulta

.headers on
.mode columns
(turn headers on and show database data in column mode )

Mostrar las mesas

.table

'.help' para ver ayuda.
O use sentencias SQL como 'Seleccionar * de automóviles'

jamón de hámster
fuente
77
'rails dbconsole' lo coloca en el intérprete de línea de comandos (CLI) de cualquier motor de base de datos que esté usando ... los anteriores son comandos SQLite ... Postgres, por ejemplo, usaría '\ dt' para enumerar las tablas ...
Tom Hundt
¿hay alguna manera de asegurarse de que cada vez que no tenga que aplicar .haders en y .more columnas cuando ejecute rails db?
Marque el
7

Para obtener una lista de todas las clases de modelos, puede usar, ActiveRecord::Base.subclassespor ejemplo,

ActiveRecord::Base.subclasses.map { |cl| cl.name }
ActiveRecord::Base.subclasses.find { |cl| cl.name == "Foo" }
DomQ
fuente
1
También:ActiveRecord::Base.descendants.map(&:name)
valk
4

Puede usar rails dbconsolepara ver la base de datos que está usando su aplicación rails. Es una respuesta alternativa rails db. Ambos comandos le dirigirán a la interfaz de línea de comandos y le permitirán usar esa sintaxis de consulta de la base de datos.

Ralf Rafael Frix
fuente
0

Ejecuta esto:

Rails.application.eager_load! 

Luego

ActiveRecord::Base.descendants

Para devolver una lista de modelos / tablas

stevec
fuente
-3

Es un comienzo, puede enumerar:

models = Dir.new("#{RAILS_ROOT}/app/models").entries

Buscando un poco más ...

rtfminc
fuente
3
Al hacer esto, solo enumera los archivos de modelos, ¡si las tablas existen en db y no tienen model fild en el directorio de modelos!
abo-elleef