Fra*_*eil 249
打电话ActiveRecord::ConnectionAdapters::SchemaStatements#tables.此方法在MySQL适配器中未记录,但在PostgreSQL适配器中有记录.SQLite/SQLite3也实现了该方法,但没有记录.
>> ActiveRecord::Base.connection.tables
=> ["accounts", "assets", ...]
Run Code Online (Sandbox Code Playgroud)
看activerecord/lib/active_record/connection_adapters/abstract/schema_statements.rb:21,以及这里的实现:
activerecord/lib/active_record/connection_adapters/mysql_adapter.rb:412activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb:615activerecord/lib/active_record/connection_adapters/sqlite_adapter.rb:176Tho*_*s E 16
基于前两个答案,您可以:
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
Run Code Online (Sandbox Code Playgroud)
列出每个抽象表的模型,以及记录数.
Hor*_*cio 11
Rails 5.2的更新
对于Rails 5.2,您还可以使用表格的名称ApplicationRecord来获取Array.就像imechemi提到的那样,请注意这个方法也将返回ar_internal_metadata并schema_migrations在该数组中.
ApplicationRecord.connection.tables
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
58257 次 |
| 最近记录: |