How to get the model name of an AR instance

I have a polymorphic class Event

class Event < ActiveRecord::Base
belongs_to :taskable, :polymorphic => true

so an event.instance has : event.taskable_type and
event.taskable_id
i.e. event[:taskable_type] = “Project” event[:taskable_id] = 2

Is it possible to localize the taskable_type ( “Project”) using
Model.model_name.human ? taskable_type is a string…

I tried to get it from the instance ,
event.taskable.model_name.human, but model_name is not an AR instance
method
( NoMethodError: undefined method `human_name’ for #<Project…>

See the method constantize.

On Thu, Feb 9, 2012 at 11:38 PM, Erwin [email protected] wrote:

Model.model_name.human ? taskable_type is a string…

I tried to get it from the instance ,
event.taskable.model_name.human, but model_name is not an AR instance
method
( NoMethodError: undefined method `human_name’ for #<Project…>

I think I found it … (taskable is the instance, but model_name needs
to
run on the class, so add .class):

Contact belongs_to :person

011:0> contact.person.model_name
NoMethodError: undefined method `model_name’ for #Person:0xaa16a44

012:0> contact.person.class.model_name
=> “Person”

I have not tried on polymorphic, but I presume it would work too.

HTH,

Peter


*** Available for a new project ***

Peter V.
http://twitter.com/peter_v
http://rails.vandenabeele.com
http://coderwall.com/peter_v

as per your answer + Evaraldo’s one :
event.taskable.class.constantize.model_name on polymorphic works

On Feb 10, 12:05am, Peter V. [email protected]

thanks Everaldo that’s it … ( maybe the first time I use it… !)

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs