par*_*ser 6 ruby-on-rails associations has-many has-one
想知道是否有一种简单的方法来动态确定模型的关联是否为" 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
Run Code Online (Sandbox Code Playgroud)
但这看起来相当笨重,并不是通用的(即对于ActiveRecord协会也不起作用).我也想避免加载任何物体,所以我很确定它instance.assoc.is_a? Array也是.
有任何想法吗?
更新:所以,我碰巧使用了反思类方法http://api.rubyonrails.org/classes/ActiveRecord/Reflection/ClassMethods.html
你可以得到所有的has_many,belongs_to等有reflect_on_all_associations方法.一切都在那里.或者,你可以把一个关联到reflect_on_association,它会告诉你,如果它是一个has_many,has_one等等.具体做法是:
Model.reflect_on_association(:assoc).macro
Run Code Online (Sandbox Code Playgroud)
这应该适用于所有情况.它实际上并没有解决我目前正在处理的问题,但它应该解决这个问题.