4

ActiveRecordモデルオブジェクト上の[has_one、has_many、belongs_to]関係のセットの存在を検出できるようにしたい。別の言い方をすれば、モデル内のルビーコードから、上記の関係のいずれかが定義されているかどうかを検出できるようにしたいと思います。

モデル属性の強引な検索以外に、賢い方法はありますか?

4

1 に答える 1

6

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

これらのメソッドから返されるデータを見て、あなたが望むことを行う方法を理解することができるはずです。

于 2013-01-16T16:47:58.953 に答える