Rails: Jak wyświetlić tabele / obiekty bazy danych za pomocą konsoli Rails?

148

Zastanawiałem się, czy możesz wyświetlić / sprawdzić, jakie bazy danych / obiekty są dostępne w konsoli Railsów. Wiem, że możesz je zobaczyć za pomocą innych narzędzi, jestem po prostu ciekawy. Dzięki.

rtfminc
źródło
2
do tego służy skrypt / dbconsole
hgmnz
Tak, to przenosi cię do mysql (lub cokolwiek innego). Z jakiegoś dziwnego powodu chcę wyświetlić kolumny / tabele itp. Ze zwykłej konsoli. Myślę, że może to wymagać niestandardowych metod rubinowych, aby zrobić coś takiego.
rtfminc

Odpowiedzi:

305

Prawdopodobnie szukasz:

ActiveRecord::Base.connection.tables

i

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

Prawdopodobnie powinieneś zawrzeć je w krótszej składni wewnątrz swojego .irbrc.

cwninja
źródło
3
Dzięki, pierwszy działa tak, jak chcę. Ale drugi nie - polował na coś podobnego, ale bez szczęścia.
rtfminc
12
ActiveRecord :: Base.connection.columns ("foos") również powinno działać, ale zwraca obiekty kolumn, .map {| c | [c.name, c.type]} na końcu rozwiązuje ten problem.
cwninja
27
table_structurewydaje się być specyficzny dla adaptera sqlite.
Kelvin
4
W przypadku Rails4 użyj Model.column_names, aby wyświetlić listę kolumn tabeli
Stephen Provis
4
Również w Rails 4 możesz po prostu użyć ModelName, aby uzyskać listę kolumn i ich typów danych.
themattkellyshow
20

Mam nadzieję, że moja późna odpowiedź może być pomocna.
To trafi do konsoli bazy danych railsów.

rails db

ładnie wydrukuj wyjście zapytania

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

Pokaż tabele

.table

„.help”, aby zobaczyć pomoc.
Lub użyj instrukcji SQL, takich jak „Wybierz * z samochodów”

szynka chomika
źródło
7
'rails dbconsole' przenosi cię do interpretera wiersza poleceń (CLI) dowolnego silnika bazy danych, którego używasz ... powyższe to polecenia SQLite ... Na przykład Postgres użyłby '\ dt' do wyświetlenia tabel ...
Tom Hundt
czy istnieje sposób, aby upewnić się, że za każdym razem, gdy nie będziesz musiał stosować .headers na i .more kolumn podczas uruchamiania szyn, db
Mark
7

Aby uzyskać listę wszystkich klas modeli, możesz użyć ActiveRecord::Base.subclassesnp

ActiveRecord::Base.subclasses.map { |cl| cl.name }
ActiveRecord::Base.subclasses.find { |cl| cl.name == "Foo" }
DomQ
źródło
1
Również:ActiveRecord::Base.descendants.map(&:name)
valk
4

Możesz użyć, rails dbconsoleaby wyświetlić bazę danych używaną przez twoją aplikację railsową. To alternatywna odpowiedź rails db. Oba polecenia skierują użytkownika do interfejsu wiersza poleceń i pozwolą na użycie tej składni zapytania do bazy danych.

Ralf Rafael Frix
źródło
0

Uruchom to:

Rails.application.eager_load! 

Następnie

ActiveRecord::Base.descendants

Aby zwrócić listę modeli / tabel

stevec
źródło
-3

To początek, może wymienić:

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

Szukam więcej ...

rtfminc
źródło
3
robiąc to, po prostu wypisujesz pliki modeli, co jeśli tabele istnieją w db i nie mają fild modelu w katalogu modeli !!
abo-elleef