Getting class name from association name

Hi

This is difficult (for me, at least :wink: )

I have a model named Measureunit and another named Vendor

Each vendor has a measureunit for the currency it use, and the association is currency

In vendor.rb I have

belongs_to :currency, :class_name => “Measureunit” , :foreign_key => “currency_id”

How can I recover the class name from the association name (eg. I have the string ‘Currency’ and I look for

a method that return ‘Measureunit’)

I found class_name() and klass() but I can’t figure the syntax…

Tnx!

I don't understand what you mean by 'I have the string "Currency"' but if you have a vendor object then you can say vendor.currency.class.name

Also I do not understand why you would want to do this so I have probably misunderstood the question.

Colin

I believe what you're saying is that you have the Vendor class, and the name of the association as a string, 'Currency'. You want to look at The ActiveRecord::Reflection documentation, specifically reflect_on_association (ActiveRecord - APIdock Reflection/ClassMethods/reflect_on_association). That gives you back an AssociationReflection, which has a bunch of information for you: ActiveRecord::Reflection::AssociationReflection - APIdock. Specifically again, you likely want klass on that, which should return the class of the association; do be aware that its a little bit more complex for polymorphic relationships if that's necessary to support.

So in summary what you likely want is something like   s = "Currency"   association_name = s.underscore # Or whatever transformation takes your string to your association name   reflection = Vendor.reflect_on_association(association_name) # Returns the AssociationReflection object   reflection.klass # Returns the class object, in this case Measureunit

HTH, \Peter

I also want to find the association name dynamically from a dynamic object. I was looking for something to help me on this. ' ActiveRecord::Reflection' a nice module to get association info.

Thanks Peter. - Abhi

Peter wrote in post #1032176: