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!

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

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