モデル間のアソシエーションの情報を取得する方法

belongs_to や has_many で宣言した、 モデル間のアソシエーションの情報を取得するには、 ActionRecord::Reflection の reflect_on_all_associations メソッドを使えばいい。

ActiveRecord::Base は ActiveRecord::Reflection を include しているので、 モデルのクラスメソッドとしてすぐ使える。

# 全部
Task.reflect_on_all_associations

# belongs_to だけ
Task.reflect_on_all_associations(:belongs_to)

# has_many だけ
Task.reflect_on_all_associations(:has_many)

1 件だけ取得する reflect_on_association なんてのもある。

Task.reflect_on_association(:list)

ActiveRecord::Reflection には、他にも使えそうなメソッドがちらほら。

アソシエーションの情報を取得する方法はずっと探していて、 ようやく見つけたのでメモしとこう。