Forgive my extreme noobishness, but why doesn’t the following work?
class Wombat < ActiveRecord::Base
validates_presence_of :name
class String
def normalize
self.upcase
end
end
def name=(name)
write_attribute(:name, name.normalize)
end
end
Of course I’d want to put the embellishment of String in a module, but
I’m just trying to get it working. But instead I get:
w = Wombat.new(:name => “test”)
NoMethodError: undefined methodnormalize' for "test":String from (irb):25:in
name=’
from /usr/lib/ruby/gems/1.8/gems/activerecord-1.15.3/lib/
active_record/base.rb:1672:insend' from /usr/lib/ruby/gems/1.8/gems/activerecord-1.15.3/lib/ active_record/base.rb:1672:in
attributes=’
from /usr/lib/ruby/gems/1.8/gems/activerecord-1.15.3/lib/
active_record/base.rb:1671:ineach' from /usr/lib/ruby/gems/1.8/gems/activerecord-1.15.3/lib/ active_record/base.rb:1671:in
attributes=’
from /usr/lib/ruby/gems/1.8/gems/activerecord-1.15.3/lib/
active_record/base.rb:1505:ininitialize_without_callbacks' from /usr/lib/ruby/gems/1.8/gems/activerecord-1.15.3/lib/ active_record/callbacks.rb:225:in
initialize’
from (irb):29:in `new’
from (irb):29
So what’s the right way to do this? I just want to do better than:
def name=(name)
write_attribute(:name, normalize(name))
end