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.