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.


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.


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'


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" }

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.


0

Ejecuta esto:

Rails.application.eager_load! 

Luego

ActiveRecord::Base.descendants

Para devolver una lista de modelos / tablas


-3

Es un comienzo, puede enumerar:

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

Buscando un poco más ...


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.