ActiveRecordモデルオブジェクト上の[has_one、has_many、belongs_to]関係のセットの存在を検出できるようにしたい。別の言い方をすれば、モデル内のルビーコードから、上記の関係のいずれかが定義されているかどうかを検出できるようにしたいと思います。
モデル属性の強引な検索以外に、賢い方法はありますか?
ActiveRecordモデルオブジェクト上の[has_one、has_many、belongs_to]関係のセットの存在を検出できるようにしたい。別の言い方をすれば、モデル内のルビーコードから、上記の関係のいずれかが定義されているかどうかを検出できるようにしたいと思います。
モデル属性の強引な検索以外に、賢い方法はありますか?
RailsのActiveRecord::Reflectionメソッドを見て、探しているものを取得してください。
Model.reflections
アソシエーション名でキー設定されたそのモデルのアソシエーションのハッシュを返します。 Model.reflect_on_all_associations
名前付きキーを省略して、それらの関連付けの配列を返します。
したがって、次のようなことができます。
Post.reflections.keys # => [:comments, :author]
Post.reflections[:comments].marco # => :has_many
Post.reflections[:author].macro # => :belongs_to
# etc etc
これらのメソッドから返されるデータを見て、あなたが望むことを行う方法を理解することができるはずです。