Как составить список всех таблиц, определенных для базы данных при использовании активной записи? - PullRequest
113 голосов
/ 30 сентября 2008

Как получить список всех таблиц, определенных для базы данных при использовании активной записи?

Ответы [ 5 ]

237 голосов
/ 01 октября 2008

Звоните ActiveRecord::ConnectionAdapters::SchemaStatements#tables. Этот метод недокументирован в адаптере MySQL, но задокументирован в адаптере PostgreSQL. SQLite / SQLite3 также имеет реализованный метод, но недокументированный.

>> ActiveRecord::Base.connection.tables
=> ["accounts", "assets", ...]

См. activerecord/lib/active_record/connection_adapters/abstract/schema_statements.rb:21, а также реализации здесь:

16 голосов
/ 11 января 2013

Основываясь на двух предыдущих ответах, вы можете сделать:

ActiveRecord::Base.connection.tables.each do |table|
  next if table.match(/\Aschema_migrations\Z/)
  klass = table.singularize.camelize.constantize      
  puts "#{klass.name} has #{klass.count} records"
end

для перечисления каждой модели, которая абстрагирует таблицу, с количеством записей.

9 голосов
/ 22 июня 2018

Обновление для Рельсы 5.2

Для Rails 5.2 вы также можете использовать ApplicationRecord, чтобы получить Array с именами вашей таблицы. Так же, как упомянул imechemi, имейте в виду, что этот метод также вернет ar_internal_metadata и schema_migrations в этом массиве.

ApplicationRecord.connection.tables
2 голосов
/ 01 октября 2008

Кажется, должен быть лучший способ, но вот как я решил свою проблему:

Dir["app/models/*.rb"].each do |file_path|
  require file_path # Make sure that the model has been loaded.

  basename  = File.basename(file_path, File.extname(file_path))
  clazz     = basename.camelize.constantize

  clazz.find(:all).each do |rec|
    # Important code here...
  end
end

В этом коде предполагается, что вы следуете стандартным правилам именования моделей для классов и файлов исходного кода.

0 голосов
/ 30 сентября 2008

Не знаю об активной записи, но вот простой запрос:

выберите имя таблицы из INFORMATION_SCHEMA.Tables где TABLE_TYPE = 'BASE TABLE'

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...