💭

【Rails】アソシエーション先を一覧でサクッと確認したい

2024/04/07に公開

テーブル数が多くなってくると、アソシエーション先をスキーマで追うよりもコマンドでサクッと確認したくなる時があります。

Reflection

https://api.rubyonrails.org/classes/ActiveRecord/Reflection/ClassMethods.html
reflectionsを使うとアソシエーション先の一覧をハッシュで取得できます。

pry(main)> Post.reflections
# => {
#   :author => #<ActiveRecord::Reflection::BelongsToReflection:0x00007f6d0c2f07b0>, 
#   :comments => #<ActiveRecord::Reflection::HasManyReflection:0x00007f6d0c2f0738>
# }

reflect_on_all_associationsの場合は配列で取得できます。

pry(main)> Post.reflect_on_all_associations
# => [
#   #<ActiveRecord::Reflection::BelongsToReflection:0x00007f6d0c2f07b0>, 
#   #<ActiveRecord::Reflection::HasManyReflection:0x00007f6d0c2f0738>
# ]

一方で、アソシエーション先のテーブル名だけ確認したい場合が多いので、mapを使ってシンプルに取得する方が実用的な気がします。

pry(main)> Post.reflect_on_all_associations.map(&:class_name)
# => ["Author", "Comment"]

Discussion