Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Rails determine if association is has_one or has_many

Wondering if there is an easy way to determine dynamically if a model's association is a "has_one" or "has_many" relationship (i.e. is this an association to one object or many).

I'm using MongoMapper, so I am able to check if a class klass has an associated model assoc with a one or many relationship via

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

but this seems rather clunky, and isn't generic (i.e. won't work for ActiveRecord associations as well). I'd also like to avoid loading any objects, so I'm pretty sure that instance.assoc.is_a? Array is out too.

Any ideas?

like image 461
pariser Avatar asked Jul 06 '13 05:07

pariser


Video Answer


1 Answers

UPDATE: So, I happened upon the Reflections Class methods http://api.rubyonrails.org/classes/ActiveRecord/Reflection/ClassMethods.html

You can get all the has_many, belongs_to, etc. with reflect_on_all_associations method. It's all in there. Or you can put in an association into reflect_on_association and it will tell you if it is a has_many, has_one, etc. Specifically:

Model.reflect_on_association(:assoc).macro

This should be sufficient for all cases. It doesn't actually solve the problem I'm currently working on, but it should solve this.

like image 188
MCB Avatar answered Sep 29 '22 04:09

MCB