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

Activerecord 使用活动记录时,如何列出为数据库定义的所有表?,activerecord,Activerecord,使用active record时,如何获取为数据库定义的所有表的列表?不知道active record,但这里有一个简单的查询: 选择表格名称 来自信息\u SCHEMA.Tables 其中TABLE_TYPE='BASE TABLE'似乎应该有更好的方法,但下面是我解决问题的方法: Dir["app/models/*.rb"].each do |file_path| require file_path # Make sure that the model has been loaded.

使用active record时,如何获取为数据库定义的所有表的列表?

不知道active record,但这里有一个简单的查询:

选择表格名称 来自信息\u SCHEMA.Tables
其中TABLE_TYPE='BASE TABLE'

似乎应该有更好的方法,但下面是我解决问题的方法:

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
此代码假定您遵循类和源代码文件的标准模型命名约定。

调用。此方法未在MySQL适配器中记录,但在PostgreSQL适配器中记录。SQLite/SQLite3也实现了该方法,但没有记录

>> ActiveRecord::Base.connection.tables
=> ["accounts", "assets", ...]
请参阅,以及此处的实现:


根据前面的两个答案,您可以:

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获取带有表名的数组。正如imechemi所提到的,请注意此方法还将返回该数组中的ar_内部_元数据和模式_迁移

ApplicationRecord.connection.tables

对于没有增加regex表匹配安全性的单行狂热者:ActiveRecord::Base.connection.tables-['schema_migrations'].map{t{t.classify}有{t.classify.constantize.count}记录}为什么在这里使用regex?如果table=='schema\u migrations'也能正常工作,那么下一步是不是也能正常工作?该列表还包括schema\u migrations table。只是要知道。谢谢:ActiveRecord::Base.connection可能已被弃用?这里没有列出ActiveRecord::Base.connection.tables。它还假设应用程序/模型/中的所有内容都是活动记录模型