On Nov 15, 12:27 pm, PandaR1 <[email protected]> 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 found class_name() and klass() but I can't figure the syntax...

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

-- 
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Talk" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-talk?hl=en.

Reply via email to