将表映射到适当的ActiveRecord :: Model

时间:2019-05-10 13:53:56

标签: ruby-on-rails ruby

我想遍历所有数据库表,并遍历数据库中的每条记录。我目前正在这样实现:

ActiveRecord::Base.connection.tables.each do |table|

  table.classify.constantize.find_each do |record|
  end

  rescue NameError
end

问题在于它会像这样提取表:ar_internal_metadataschema_migrations,但它们没有相应的模型,因此,我的table.classify.constantize失败了,而其中的NameError这就是为什么我在底部进行救援。

我不想挽救该错误。因此,有没有一种方法可以将表映射到适当的ActiveRecord :: Model?

1 个答案:

答案 0 :(得分:1)

仅忽略所有不存在的模型就容易出错。相反,我建议只忽略您期望没有相应模型的表。

RAILS_META_TABLES = %w[ar_internal_metadata schema_migrations]

ActiveRecord::Base.connection.tables.each do |table|
  next if RAILS_META_TABLES.include?(table)

  table.classify.constantize.find_each do |record|
    # ...
  end
end