Calling a method on class creation

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

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

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

eggie5 wrote:

d=ContentCampaign.new
@status= evaluate_status

end

Try instead:

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

def evaluate_status
‘Waiting’
end

def status
@status ||= evaluate_status
end
end

On 8/24/07, eggie5 [email protected] wrote:

THANKS! that’s the trick I was looking for. Now this reminds me of an
example from the essential rails book…

So, it looks like status is called automatically when a new instance
of the class is created?

does defining an after_initialize method not work for you?

by the way, your belongs_to method doesn’t need the :class_name or
:foreign_key specifications… These can be inferred from the
association itself.

Adam

THANKS! that’s the trick I was looking for. Now this reminds me of an
example from the essential rails book…

So, it looks like status is called automatically when a new instance
of the class is created?

sorry I didn’t see you solution till after I tried accessor method.

Regarding the foreign_key and class_name things, rails was warning me
that if I could, I should specify them to avoid confusion. Since it
was not big deal I just put them in. It’s the least I could do for
ActiveRecord!

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