Rails: Como listar tabelas / objetos de banco de dados usando o console do Rails?

148

Eu queria saber se você poderia listar / examinar quais bancos de dados / objetos estão disponíveis para você no console do Rails. Eu sei que você pode vê-los usando outras ferramentas, só estou curioso. Obrigado.

rtfminc
fonte
2
é para isso que
serve
Sim, isso coloca você no mysql (ou o que seja). Por algum motivo estranho, quero listar colunas / tabelas, etc, no console comum. Eu estou pensando que pode exigir métodos ruby ​​personalizados para fazer uma coisa dessas.
Rtfminc

Respostas:

305

Você provavelmente está procurando:

ActiveRecord::Base.connection.tables

e

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

Você provavelmente deve envolvê-los em uma sintaxe mais curta dentro do seu .irbrc.

cwninja
fonte
3
Obrigado, o primeiro funciona como eu quero. Mas o segundo não - procurou algo semelhante, mas sem sorte.
Rtfminc
12
ActiveRecord :: Base.connection.columns ("foos") também deve funcionar, mas retorna objetos de coluna, .map {| c | [c.name, c.type]} no final corrige isso.
cwninja
27
table_structureparece ser específico para o adaptador sqlite.
Kelvin em
4
Para Rails4 usar Model.column_names à lista colunas da tabela
Stephen Provis
4
Também no Rails 4, você pode apenas usar ModelName para obter uma lista das colunas e seus tipos de dados.
Themattkellyshow 11/04/19
20

Espero que minha resposta tardia possa ser de alguma ajuda.
Isso irá para o console do banco de dados do Rails.

rails db

bonita imprimir sua saída da consulta

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

Mostrar as tabelas

.table

'.help' para ver ajuda.
Ou use instruções SQL como 'Select * from cars'

presunto hamster
fonte
7
'rails dbconsole' coloca você no interpretador de linha de comando (CLI) de qualquer mecanismo de banco de dados que você estiver usando ... os comandos acima são SQLite ... O Postgres, por exemplo, usaria '\ dt' para listar tabelas ...
precisa
há uma maneira de garantir que cada vez que você não tem que aplicar .headers sobre e colunas .mais quando carris de rolamento db
Mark
7

Para obter uma lista de todas as classes de modelo, você pode usar, ActiveRecord::Base.subclassespor exemplo,

ActiveRecord::Base.subclasses.map { |cl| cl.name }
ActiveRecord::Base.subclasses.find { |cl| cl.name == "Foo" }
DomQ
fonte
1
Também:ActiveRecord::Base.descendants.map(&:name)
valk 9/09/16
4

Você pode usar rails dbconsolepara visualizar o banco de dados que seu aplicativo rails está usando. É uma resposta alternativa rails db. Ambos os comandos direcionarão a interface da linha de comandos e permitirão o uso dessa sintaxe de consulta ao banco de dados.

Ralf Rafael Frix
fonte
0

Rode isto:

Rails.application.eager_load! 

Então

ActiveRecord::Base.descendants

Para retornar uma lista de modelos / tabelas

stevec
fonte
-3

É um começo, ele pode listar:

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

Procurando um pouco mais ...

rtfminc
fonte
3
Ao fazer isso, você apenas lista os arquivos dos modelos e se houver tabelas no db e não tiver o modelo fild no diretório dos modelos !!
Abo-elleef