Override ActiveRecord attribute methods
activerecord, oop, ruby-on-rails
Solution
Echoing Gareth's comments... your code will not work as written. It should be rewritten this way:
def name=(name)
write_attribute(:name, name.capitalize)
end
def name
read_attribute(:name).downcase # No test for nil?
end
Problem
An example of what I'm talking about: ``` class Person < ActiveRecord::Base def name=(name) super(name.capitalize) end def name super().downcase # not sure why you'd do this; this is just an example end end ``` This seems to work, but I was just read the section on overriding attribute methods in the ActiveRecord::Base docs, and it suggests using the `read_attribute` and `write_attribute` methods. I thought there must be something wrong with what I'm doing in the example above; otherwise, why would they bless these methods as the "right way" to override attribute methods? They're also forcing a much uglier idiom, so there must be a good reason... My real question: Is there something wrong with this example?