Rails で全部のモデルについて何かの処理をしたい

eager_load = true にした上で ↓ のスクリプトbundle exec rails r する

ar_classes = []

ObjectSpace.each_object do |obj|
  next if obj.class.name.to_s != 'Class'
  if obj.ancestors.include?(ActiveRecord::Base) && obj != ActiveRecord::Base
    ar_classes << obj
  end
end

# 本体の処理

今回は実際にはテーブル名がほしかったのでこんな処理を。

table_names = ar_classes.map do |klass|
  klass.respond_to?(:table_name) && klass.table_name
end

puts table_names.compact.sort

SwitchPoint 使ってるとそれの子供が釣れるみたいだけど気にしない。


完全にせやな、であった