# Aliasing AR attributes

**URL:** <https://www.ruby-forum.com/t/aliasing-ar-attributes/170291>\
**Category:** Rails\
**Created:** [June 15, 2009, 4:23pm UTC](https://www.ruby-forum.com/t/aliasing-ar-attributes/170291 "2009-06-15T16:23:50Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![Martin\_Vielsmaier](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/ce7236/32.png) [@Martin\_Vielsmaier](https://www.ruby-forum.com/u/Martin_Vielsmaier)\
**Post date:** [June 15, 2009, 4:23pm UTC](https://www.ruby-forum.com/t/aliasing-ar-attributes/170291/1 "2009-06-15T16:23:50Z")

</div>

Hey,

I’d like to add some “magic” functionality to some model by chain  
aliasing an attributes setter method like this:  
class Thing \< ActiveRecord::Base  
def registration\_with\_upcase=®  
self.registration\_without\_upcase=(r.upcase)  
end  
alias\_method\_chain “registration=”, :upcase  
end  
p = Plane.new  
p.destroy  
Plane.class\_eval \<\<-eos  
def registration\_with\_upcase=®  
self.registration\_without\_upcase=(r.upcase)  
end  
alias\_method\_chain “registration=”, :upcase  
eos

---

<div class="post-metadata">

**Author:** ![Martin\_Vielsmaier](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/ce7236/32.png) [@Martin\_Vielsmaier](https://www.ruby-forum.com/u/Martin_Vielsmaier)\
**Post date:** [June 15, 2009, 4:28pm UTC](https://www.ruby-forum.com/t/aliasing-ar-attributes/170291/2 "2009-06-15T16:28:33Z")

</div>

Argh sorry…  
Again:  
Hey,

I’d like to add some “magic” functionality to some model by chain  
aliasing an attributes setter method like this:  
class Thing \< ActiveRecord::Base  
def name\_with\_upcase=®  
self.name\_without\_upcase=(r.upcase)  
end  
alias\_method\_chain “name=”, :upcase  
end

This (on script/console) gives me this error:  
NameError: /usr/lib/ruby/gems/1.8/gems/activesupport-2.3.2/lib/  
active\_support/core\_ext/module/aliasing.rb:33:in `alias_method': undefined method`name=’ for class `Thing’

Seems like model doesn’t know about its attributes at this point.  
Even if I add my aliasing code after the class:  
class Thing \< ActiveRecord::Base  
end  
Thing.class\_eval \<\<-eos  
def name\_with\_upcase=®  
self.name\_without\_upcase=(r.upcase)  
end  
alias\_method\_chain “name=”, :upcase  
eos

I get the same error.  
But if I add a simple  
puts Thing.new  
between the class and the eval part, it works.

Any ideas how I can force the model to load it’s attributes earlier?

---

<div class="post-metadata">

**Author:** ![Martin\_Vielsmaier](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/ce7236/32.png) [@Martin\_Vielsmaier](https://www.ruby-forum.com/u/Martin_Vielsmaier)\
**Post date:** [June 17, 2009, 3:30pm UTC](https://www.ruby-forum.com/t/aliasing-ar-attributes/170291/3 "2009-06-17T15:30:32Z")

</div>

Ok, found a solution: (I didn’t know about write\_attribute)  
This works:  
def name=(str)  
str.upcase! unless str.nil?  
write\_attribute(:name, str)  
end
