Getting class name from association name

17 views
Skip to first unread message

PandaR1

unread,
Nov 15, 2011, 1:27:10 PM11/15/11
to rubyonra...@googlegroups.com
Hi

This is difficult (for me, at least ;) )

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!

Colin Law

unread,
Nov 16, 2011, 4:50:44 AM11/16/11
to rubyonra...@googlegroups.com
On 15 November 2011 18:27, PandaR1 <fabio.mo...@gmail.com> wrote:
> Hi
> This is difficult (for me, at least ;) )
> 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 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

Peter

unread,
Nov 16, 2011, 10:24:00 AM11/16/11
to Ruby on Rails: Talk
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 (http://apidock.com/rails/ActiveRecord/
Reflection/ClassMethods/reflect_on_association). That gives you back
an AssociationReflection, which has a bunch of information for you:
http://apidock.com/rails/ActiveRecord/Reflection/AssociationReflection.
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

Abhilash Ambazhappilly

unread,
Jun 13, 2016, 2:01:39 AM6/13/16
to rubyonra...@googlegroups.com
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:
--
Posted via http://www.ruby-forum.com/.
Reply all
Reply to author
Forward
0 new messages