Re: Calling a method on class creation

eggie5
Fri, 24 Aug 2007 05:11:18 -0000

It doesn''t seem like the initializer gets called when you create a new
instance using .find(), e.g.:

c=ContentCampaign.find(1)
c.status

=> nill

However, If I create a new instance using new it works, e.g:

d=ContentCampaign.new
c.status
=> Waiting

Here is my class, what''s going on?

class ContentCampaign < ActiveRecord::Base
  belongs_to :category, :class_name => "Category", :foreign_key
=>
"category_id"

  def initialize
   @status= evaluate_status
  end


  def evaluate_status
    ''Waiting''
  end

  def status
    @status
  end

end


On Aug 23, 5:18 pm, dang <dgr...-vQs5aMGR+7nQT0dZR+AlfA@public.gmane.org>
wrote:
> initialize or after_initialize should do what you need. Initialize is
> called by ruby when the object is, well, initialized...
>
> cheers,
> Dan
>
> ================================> class User < ActiveRecord::Base
>   has_and_belongs_to_many :roles
>
>   def initialize
>     evaluate_status
>   end
>
>   def evaluate_status
>     #evaluate the status
>     #@status = ...
>   end
> end
> ================================>
> On Aug 24, 9:15 am, eggie5
<egg...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:
>
> > I have a model User that has property called status. Status is just a
> > string that can only be evaluated and not persisted. I.e. it
doesn''t
> > have a field in the user table.
>
> > Anyways, I would like a method get_status to be called anytime I
> > create a new instance of User. For example:
>
> > user=User.new
>
> > Since I created a new instance of User, I should now have access to
> > the status property, e.g.:
>
> > user.status
> > =>"Ready"
>
> > Here is my User class:
>
> > class User < ActiveRecord::Base
> >   has_and_belongs_to_many :roles
>
> > def evaluate_status
> >     #evaluate the status
> >     #@status = ...
> >   end
> > end
>
> > How would I call get_status whenever a new instance of User is
> > created? It''s constructor?
>
> > Thanks