我希望能够在ActiveRecord模型对象上检测到[has_one,has_many,belongs_to]关系集的存在。换句话说,我希望能够从模型中的ruby代码中检测它是否具有定义的上述关系之一。
除了强力搜索模型属性之外,还有一些聪明的方法吗?
答案 0 :(得分:5)
查看Rails'ActiveRecord::Reflection methods以获取您正在寻找的内容。
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
看看从这些方法返回的数据,你应该能够弄清楚如何做你想做的事。