如何在使用活动logging时列出为数据库定义的所有表?
在使用活动logging时,如何获取为数据库定义的所有表的列表?
调用ActiveRecord::ConnectionAdapters::SchemaStatements#tables
。 这个方法在MySQL适配器中没有logging,但在PostgreSQL适配器中有logging。 SQLite / SQLite3也有实现的方法,但没有logging。
>> 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
列出抽象表的每个模型,logging的数量。
似乎应该有一个更好的方法,但这是我如何解决我的问题:
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
此代码假定您遵循类和源代码文件的标准模型命名约定。
不知道有效的logging,但这是一个简单的查询:
从INFORMATION_SCHEMA.Tables中selecttable_name,其中TABLE_TYPE ='BASE TABLE'
- has_and_belongs_to_many,避免连接表中的愚蠢
- 为什么所有的活动logging都讨厌?
- ActiveRecord :: StatementInvalid:PG InFailedSqlTransaction
- 如何select数组中的ID Rails ActiveRecord毫无例外
- attr_accessible(* attributes)和attr_protected(* attributes)有什么区别?
- 从已经在数据库中的数据创build种子文件
- 如何testing(ActiveRecord)对象相等
- Ruby rails – 从数据库中只select几列
- Rails的ActiveRecord查询不等于