4

我希望能够检测 ActiveRecord 模型对象上是否存在 [has_one, has_many, belongs_to] 关系集。换句话说,我希望能够从模型中的 ruby​​ 代码中检测它是否定义了上述关系之一。

除了模型属性的蛮力搜索之外,还有什么聪明的方法吗?

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 回答