답변:
전화하십시오 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
테이블 도 포함되어 있습니다 . 그냥 알아 둬 감사합니다 :)