Rails: Як перерахувати таблиці / об’єкти бази даних за допомогою консолі Rails?


148

Мені було цікаво, чи можете ви перелічити / вивчити, які бази даних / об’єкти доступні вам у консолі Rails. Я знаю, що ви можете бачити їх за допомогою інших інструментів, мені просто цікаво. Дякую.


2
ось для чого скрипт / dbconsole
hgmnz

Так, це скидає вас у mysql (чи що завгодно). З незнайомих причин я хочу перерахувати стовпці / таблиці тощо з звичайної консолі. Я думаю, що для цього може знадобитися рубіновий метод рубіну.
rtfminc

Відповіді:


305

Ви, ймовірно, шукаєте:

ActiveRecord::Base.connection.tables

і

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

Ви, ймовірно, повинні загортати їх у коротший синтаксис всередині вашого .irbrc.


3
Дякую, перший працює так, як я хочу. Але другий - ні, полював на щось подібне, але не пощастило.
rtfminc

12
ActiveRecord :: Base.connection.column ("foos") також повинен працювати, але він повертає об'єкти стовпців, .map {| c | [c.name, c.type]} в кінці виправляє це.
cwninja

27
table_structureЗдається, специфічно для адаптера sqlite.
Келвін

4
Для Rails4 використовуйте Model.column_names, щоб перелічити стовпці таблиці
Стівен Провіс

4
Також у Rails 4 ви можете просто використовувати ModelName, щоб отримати список стовпців та їх типи даних.
themattkellyshow

20

Я сподіваюся, що моя пізня відповідь може бути корисною.
Це перейде до консолі баз даних рейок.

rails db

досить надрукувати вихідний запит

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

Покажіть таблиці

.table

". допомогти", щоб отримати допомогу.
Або використовувати оператори SQL на зразок "Вибрати * з автомобілів"


7
'rails dbconsole' додає вас до інтерпретатора командного рядка будь-якого двигуна бази даних, який ви використовуєте ... вище наведені команди SQLite ... Postgres, наприклад, використовує '\ dt' для переліку таблиць ...
Том Хундт

чи є спосіб переконатись, що кожного разу, коли вам не потрібно застосовувати заголовки на стовпцях та. Більше колонок під час запуску рейки db
Марк

7

Щоб отримати список усіх модельних класів, ви можете використовувати ActiveRecord::Base.subclassesнапр

ActiveRecord::Base.subclasses.map { |cl| cl.name }
ActiveRecord::Base.subclasses.find { |cl| cl.name == "Foo" }

1
Також:ActiveRecord::Base.descendants.map(&:name)
valk

4

Ви можете використовувати rails dbconsoleдля перегляду бази даних, яку використовує ваша рейкова програма. Це альтернативна відповідь rails db. Обидві команди спрямовуватимуть інтерфейс командного рядка та дозволять використовувати цей синтаксис запитів до бази даних.


0

Виконати це:

Rails.application.eager_load! 

Тоді

ActiveRecord::Base.descendants

Щоб повернути список моделей / таблиць


-3

Його початок, він може перелічити:

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

Подивіться ще трохи ...


3
роблячи це, ви просто перераховуєте файли моделей, що, якщо таблиці існують у db, і у них немає файлових моделей у моделях dir !!
або-elleef
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.