Rails: Wie liste ich Datenbanktabellen / -objekte über die Rails-Konsole auf?

147

Ich habe mich gefragt, ob Sie auflisten / untersuchen können, welche Datenbanken / Objekte Ihnen in der Rails-Konsole zur Verfügung stehen. Ich weiß, dass Sie sie mit anderen Werkzeugen sehen können, ich bin nur neugierig. Vielen Dank.

rtfminc
quelle
2
Dafür ist script / dbconsole gedacht
hgmnz
Ja, das bringt dich in MySQL (oder was auch immer). Aus irgendeinem Grund möchte ich Spalten / Tabellen usw. von der normalen Konsole aus auflisten. Ich denke, dass es maßgeschneiderte Rubinmethoden erfordern könnte, um so etwas zu tun.
RTFMINC

Antworten:

304

Sie suchen wahrscheinlich:

ActiveRecord::Base.connection.tables

und

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

Sie sollten sie wahrscheinlich in eine kürzere Syntax einbinden .irbrc.

cwninja
quelle
3
Danke, der erste funktioniert wie ich will. Aber der zweite nicht - auf der Suche nach etwas Ähnlichem, aber ohne Glück.
RTFMINC
12
ActiveRecord :: Base.connection.columns ("foos") sollte ebenfalls funktionieren, gibt jedoch die Spaltenobjekte .map {| c | zurück [c.name, c.type]} am Ende behebt das.
Cwninja
27
table_structurescheint spezifisch für den SQLite-Adapter zu sein.
Kelvin
4
Für Rails4 verwenden Sie Model.column_names, um Tabellenspalten aufzulisten
Stephen Provis
4
Auch in Rails 4 können Sie mit ModelName eine Liste der Spalten und ihrer Datentypen abrufen .
themattkellyshow
20

Ich hoffe, meine späte Antwort kann hilfreich sein.
Dies wird zur Rails-Datenbankkonsole gehen.

rails db

Drucken Sie Ihre Abfrageausgabe hübsch aus

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

Zeigen Sie die Tabellen

.table

'.help' um Hilfe zu sehen.
Oder verwenden Sie SQL-Anweisungen wie 'Select * from cars'

Hamsterschinken
quelle
7
'rails dbconsole' versetzt Sie in den Befehlszeileninterpreter (CLI) der von Ihnen verwendeten Datenbank-Engine ... die oben genannten sind SQLite-Befehle ... Postgres würde beispielsweise '\ dt' verwenden, um Tabellen aufzulisten ...
Tom Hundt
Gibt es eine Möglichkeit, um sicherzustellen, dass Sie nicht jedes Mal .headers auf und .more Spalten anwenden müssen, wenn Sie Schienen db ausführen
Mark
7

Um eine Liste aller Modellklassen zu erhalten, können Sie ActiveRecord::Base.subclassesz

ActiveRecord::Base.subclasses.map { |cl| cl.name }
ActiveRecord::Base.subclasses.find { |cl| cl.name == "Foo" }
DomQ
quelle
1
Auch:ActiveRecord::Base.descendants.map(&:name)
Valk
4

Sie können rails dbconsoledamit die Datenbank anzeigen, die Ihre Rails-Anwendung verwendet. Es ist eine alternative Antwort rails db. Beide Befehle leiten Sie über die Befehlszeilenschnittstelle und ermöglichen Ihnen die Verwendung dieser Datenbankabfragesyntax.

Ralf Rafael Frix
quelle
0

Führen Sie Folgendes aus:

Rails.application.eager_load! 

Dann

ActiveRecord::Base.descendants

Rückgabe einer Liste von Modellen / Tabellen

stevec
quelle
-3

Es ist ein Anfang, es kann auflisten:

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

Suchen Sie noch mehr ...

rtfminc
quelle
3
Auf diese Weise listen Sie nur Modelldateien auf. Was passiert, wenn Tabellen in db vorhanden sind und kein Modell fild im Modellverzeichnis vorhanden ist?
Abo-Elleef