当前位置:  开发笔记 > 后端 > 正文

使用活动记录时如何列出为数据库定义的所有表?

如何解决《使用活动记录时如何列出为数据库定义的所有表?》经验,为你挑选了3个好方法。

使用活动记录时,如何获取为数据库定义的所有表的列表?



1> François Bea..:

打电话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


该列表还包括`schema_migrations`表.请注意.谢谢 :)

2> Thomas E..:

基于前两个答案,您可以:

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

列出每个抽象表的模型,以及记录数.



3> Horacio..:

Rails 5.2的更新

对于Rails 5.2,您还可以使用表格的名称ApplicationRecord来获取Array.就像imechemi提到的那样,请注意这个方法也将返回ar_internal_metadataschema_migrations在该数组中.

ApplicationRecord.connection.tables

推荐阅读
有风吹过best
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有