我希望能够检测 ActiveRecord 模型对象上是否存在 [has_one, has_many, belongs_to] 关系集。换句话说,我希望能够从模型中的 ruby 代码中检测它是否定义了上述关系之一。
除了模型属性的蛮力搜索之外,还有什么聪明的方法吗?
我希望能够检测 ActiveRecord 模型对象上是否存在 [has_one, has_many, belongs_to] 关系集。换句话说,我希望能够从模型中的 ruby 代码中检测它是否定义了上述关系之一。
除了模型属性的蛮力搜索之外,还有什么聪明的方法吗?
看看 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
看看从这些方法返回的数据,你应该能够弄清楚如何做你想做的事。