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