131 votes

Comment afficher la liste de toutes les tables définies pour la base de données lors de l'utilisation d'active record?

Comment puis-je obtenir une liste de toutes les tables définies pour la base de données lors de l'utilisation d'active record?

271voto

François Beausoleil Points 6493

Appelez ActiveRecord::ConnectionAdapters::SchemaStatements#tables. Cette méthode n'est pas documenté dans la base de l'adaptateur, mais est documentée dans le PostgreSQL adaptateur. SQLite/SQLite3 a aussi la méthode mise en œuvre, mais sans papiers.

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

Voir activerecord/lib/active_record/connection_adapters/abstract/schema_statements.rb:21, ainsi que les implémentations ici:

20voto

Thomas E Points 368

Sur la base des deux réponses précédentes, vous pourriez faire:

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

pour la liste de tous les modèles que les résumés d'une table, avec le nombre d'enregistrements.

2voto

Jay Stramel Points 1265

Il semble qu'il devrait y avoir une meilleure façon, mais voici comment j'ai résolu mon problème:

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

Ce code suppose que vous suivez le modèle standard des conventions de nommage pour les classes et les fichiers de code source.

0voto

Kon Points 16125

Ne sais pas active record, mais voici une requête simple:

select table_name de INFORMATION_SCHEMA.Tables où TABLE_TYPE = 'la BASE de la TABLE"

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X