使用活动记录时,如何获取为数据库定义的所有表的列表?
打电话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/lib/active_record/connection_adapters/mysql_adapter.rb:412
activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb:615
activerecord/lib/active_record/connection_adapters/sqlite_adapter.rb:176
基于前两个答案,您可以:
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
列出每个抽象表的模型,以及记录数.
Rails 5.2的更新
对于Rails 5.2,您还可以使用表格的名称ApplicationRecord
来获取Array
.就像imechemi提到的那样,请注意这个方法也将返回ar_internal_metadata
并schema_migrations
在该数组中.
ApplicationRecord.connection.tables