¿Cómo obtengo una lista de todas las tablas definidas para la base de datos cuando uso el registro activo?
¿Cómo obtengo una lista de todas las tablas definidas para la base de datos cuando uso el registro activo?
Respuestas:
Llamar ActiveRecord::ConnectionAdapters::SchemaStatements#tables. Este método no está documentado en el adaptador MySQL, pero está documentado en el adaptador PostgreSQL. SQLite / SQLite3 también tiene el método implementado, pero no documentado.
>> ActiveRecord::Base.connection.tables
=> ["accounts", "assets", ...]
Vea activerecord/lib/active_record/connection_adapters/abstract/schema_statements.rb:21, así como las implementaciones aquí:
Según las dos respuestas anteriores, puede hacer:
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
para enumerar cada modelo que abstrae una tabla, con el número de registros.
Una actualización para Rails 5.2
Para Rails 5.2 también puede usar ApplicationRecordpara obtener un Arraycon los nombres de su tabla. Solo, como mencionó imechemi, tenga en cuenta que este método también regresará ar_internal_metadatay schema_migrationsen esa matriz.
ApplicationRecord.connection.tables
Parece que debería haber una mejor manera, pero así es como resolví mi problema:
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
Este código supone que está siguiendo las convenciones de nomenclatura del modelo estándar para las clases y los archivos de código fuente.
schema_migrationstabla. Solo ten en cuenta. Gracias :)