代码之家  ›  专栏  ›  技术社区  ›  Mark

Rails Ruby获取数据库表名的最简单方法[duplicate]

  •  0
  • Mark  · 技术社区  · 6 年前

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

    0 回复  |  直到 16 年前
        1
  •  248
  •   François Beausoleil    16 年前
        2
  •  16
  •   Thomas E    12 年前

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

    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
  •  11
  •   Horacio    6 年前

    的更新 轨道5.2

    对于Rails 5.2,您还可以使用 ApplicationRecord 得到一个 Array 和你桌子的名字。正如imechim提到的,注意这个方法也会返回 ar_internal_metadata schema_migrations 在那个阵型里。

    ApplicationRecord.connection.tables
    
        4
  •  1
  •   Jay Stramel    16 年前

    似乎应该有更好的办法,但我是这样解决我的问题的:

    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
    

    此代码假定您遵循类和源代码文件的标准模型命名约定。

        5
  •  0
  •   Kon    16 年前

    不知道活动记录,但这里有一个简单的查询:

    选择表名 从信息架构表 其中TABLE_TYPE='基表'