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
使ってるとそれの子供が釣れるみたいだけど気にしない。
Rails だったら descendants 使う方が良さそう
— たにみち (@ttanimichi) 2018年11月29日
完全にせやな、であった