8

想知道是否有一种简单的方法可以动态确定模型的关联是“ has_one”还是“ has_many”关系(即,这是与一个对象还是多个对象的关联)。

我正在使用 MongoMapper,因此我可以通过以下方式检查一个类是否具有具有一个或多个关系klass的关联模型assoc

klass.associations[:assoc].is_a? MongoMapper::Plugins::Associations::OneAssociation
klass.associations[:assoc].is_a? MongoMapper::Plugins::Associations::ManyAssociation

但这似乎相当笨重,而且不是通用的(即也不适用于ActiveRecord关联)。我还想避免加载任何对象,所以我很确定这instance.assoc.is_a? Array也是。

有任何想法吗?

4

1 回答 1

11

更新:所以,我碰巧遇到了反射类方法http://api.rubyonrails.org/classes/ActiveRecord/Reflection/ClassMethods.html

您可以使用方法获取所有has_many,belongs_toreflect_on_all_associations。都在里面。或者您可以将关联放入reflect_on_association其中,它会告诉您它是否为has_many,has_one等。具体而言:

Model.reflect_on_association(:assoc).macro

这对于所有情况都应该足够了。它实际上并没有解决我目前正在处理的问题,但它应该可以解决这个问题。

于 2013-11-21T20:40:05.743 回答