回答:
を呼び出し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
と、ここでの実装を参照してください。
前の2つの答えに基づいて、次のことができます。
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
表も含まれています。注意してください。ありがとう:)