Activerecord: use attributes methods instead of attrs var

This is the case: when you call save() on an activerecord::base object
it goes through all the attrs[:] and saves them. But I have a lot of
attributes overriden.
For example:

class Tester
def name
write_attribute(:name, ‘This is just a silly example!’)
read_attribute(:name)
end
end

t = Tester.new
t.save

But when I do save() it doesn’t get saved to the database if I haven’t
called the name() method.

When I add a validation, the method somewhere gets called and it is
added to the attrs instance variable.

Is there a way, without adding validations for every attribute, to call
the attribute methods before save?

I thought about using a before_save filter, but maybe someone would new
a better/other way.

I’m just curious if it’s possible. Maybe I’m on the wrong track and
there may be better ways to override the attribute getters?

Thanks in advance!

On Mon, Sep 22, 2008 at 6:05 PM, Leon B. <
[email protected]> wrote:

end

Is there a way, without adding validations for every attribute, to call
the attribute methods before save?

I thought about using a before_save filter, but maybe someone would new
a better/other way.

I’m just curious if it’s possible. Maybe I’m on the wrong track and
there may be better ways to override the attribute getters?

You’re essentially trying to set default values for your attributes,
right?
If so, I would use the #after_initialize callback, which AR calls when a
new
instance of the class is created.

class Tester < ActiveRecord::Base
def after_initialize
self.name ||= ‘Default name’
end
end

Brandon


Sessions by Collective Idea: Ruby on Rails training in a vacation
setting
http://sessions.collectiveidea.com

I would recommend the before_create callback.
it seems you do not need to overwrite the the attributes everytime you
update it,
and before_create work only for new records.

after_initialize has performance issue
and overwrite the default getter may cause side effects.

hope that helps.

Regards,

Peng Zuo

On Tue, Sep 23, 2008 at 8:10 AM, Brandon K. [email protected]
wrote:

write_attribute(:name, ‘This is just a silly example!’)
When I add a validation, the method somewhere gets called and it is

Brandon


Sessions by Collective Idea: Ruby on Rails training in a vacation setting
http://sessions.collectiveidea.com

Murray Walker - “And now, excuse me while I interrupt myself.”