¿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 ApplicationRecord
para obtener un Array
con los nombres de su tabla. Solo, como mencionó imechemi, tenga en cuenta que este método también regresará ar_internal_metadata
y schema_migrations
en 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_migrations
tabla. Solo ten en cuenta. Gracias :)