Як я можу отримати список усіх таблиць, визначених для бази даних при використанні активного запису?
Як я можу отримати список усіх таблиць, визначених для бази даних при використанні активного запису?
Відповіді:
Дзвінок 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
, а також реалізації тут:
На основі двох попередніх відповідей можна зробити:
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
перелічити кожну модель, яка резюмує таблицю, з кількістю записів.
Здається, має бути кращий спосіб, але ось як я вирішив свою проблему:
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
Цей код передбачає, що ви керуєтесь стандартними умовами іменування моделей для класів та файлів вихідного коду.
schema_migrations
таблицю. Тільки знайте. Дякую :)