Rails: come elencare le tabelle / gli oggetti del database usando la console Rails?


148

Mi chiedevo se potessi elencare / esaminare quali database / oggetti sono disponibili nella console di Rails. So che puoi vederli usando altri strumenti, sono solo curioso. Grazie.


2
questo è lo script / dbconsole, però
hgmnz,

Sì, questo ti fa cadere in mysql (o qualunque altra cosa). Per qualche strana ragione voglio elencare colonne / tabelle ecc. Dalla normale console. Sto pensando che potrebbe richiedere metodi personalizzati di rubini per fare una cosa del genere.
RTFMinc,

Risposte:


305

Probabilmente stai cercando:

ActiveRecord::Base.connection.tables

e

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

Probabilmente dovresti avvolgerli in una sintassi più breve all'interno del tuo .irbrc.


3
Grazie, il primo funziona come voglio io. Ma il secondo no: caccia a qualcosa di simile ma senza fortuna.
RTFMinc,

12
Anche ActiveRecord :: Base.connection.columns ("foos") dovrebbe funzionare, ma restituisce oggetti colonna, .map {| c | [c.name, c.type]} alla fine lo risolve.
cwninja,

27
table_structuresembra essere specifico per l'adattatore sqlite.
Kelvin,

4
Per Rails4 usa Model.column_names per elencare le colonne della tabella
Stephen Provis,

4
Anche in Rails 4, puoi semplicemente usare ModelName per ottenere un elenco delle colonne e dei relativi tipi di dati.
themattkellyshow l'

20

Spero che la mia risposta tardiva possa essere di qualche aiuto.
Questo andrà alla console del database rails.

rails db

piuttosto stampare l'output della query

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

Mostra le tabelle

.table

'.help' per vedere aiuto.
O usa istruzioni SQL come 'Seleziona * da auto'


7
'rails dbconsole' ti mette nell'interprete da riga di comando (CLI) di qualunque motore di database stai usando ... i precedenti sono comandi SQLite ... Postgres, ad esempio, userebbe '\ dt' per elencare le tabelle ...
Tom Hundt,

c'è un modo per assicurarsi che ogni volta che non è necessario applicare .headers su e .more colonne quando si eseguono rotaie db
Segna il

7

Per ottenere un elenco di tutte le classi di modelli, è possibile utilizzare ActiveRecord::Base.subclassesad es

ActiveRecord::Base.subclasses.map { |cl| cl.name }
ActiveRecord::Base.subclasses.find { |cl| cl.name == "Foo" }

1
Inoltre:ActiveRecord::Base.descendants.map(&:name)
Valk,

4

È possibile utilizzare rails dbconsoleper visualizzare il database utilizzato dall'applicazione Rails. È una risposta alternativa rails db. Entrambi i comandi indirizzeranno l'interfaccia della riga di comando e ti consentiranno di utilizzare la sintassi delle query del database.


0

Esegui questo:

Rails.application.eager_load! 

Poi

ActiveRecord::Base.descendants

Per restituire un elenco di modelli / tabelle


-3

È un inizio, può elencare:

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

Cerchi ancora ...


3
in questo modo si elencano solo i file dei modelli e se le tabelle sono presenti in db e non si ha il modello fild nella directory dei modelli !!
abo-elleef,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.