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.


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.


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'


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

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.


0

Führen Sie Folgendes aus:

Rails.application.eager_load! 

Dann

ActiveRecord::Base.descendants

Rückgabe einer Liste von Modellen / Tabellen


-3

Es ist ein Anfang, es kann auflisten:

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

Suchen Sie noch mehr ...


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.