# Overwriting default accessors

**URL:** <https://www.ruby-forum.com/t/overwriting-default-accessors/177119>\
**Category:** Rails\
**Created:** [October 12, 2009, 1:17am UTC](https://www.ruby-forum.com/t/overwriting-default-accessors/177119 "2009-10-12T01:17:31Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![builtbysimple](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/aca169/32.png) [@builtbysimple](https://www.ruby-forum.com/u/builtbysimple)\
**Post date:** [October 12, 2009, 1:17am UTC](https://www.ruby-forum.com/t/overwriting-default-accessors/177119/1 "2009-10-12T01:17:31Z")

</div>

Hi all,

Coming from the Java & Hibernate world, I was confused when trying out  
this piece of line of code:  
class Task \< ActiveRecord::Base  
def status=(status)  
status = ‘P’  
write\_attribute(:status, status)  
end  
end

I suspect that the value of :status in the database would be P,  
because I presume rails would set the attribute value first before  
saving it to the database. But instead I am getting this error:  
ActiveRecord::StatementInvalid: Mysql::Error: Column ‘status’ cannot be  
null

So what does overwriting default accessors used for in real life apps?  
And how do we set the value before it is saved to the database in  
Rails?

Thank you very much in advance for the insights.

–  
Certified Scrum Master  
[http://twitter.com/scrum8](http://twitter.com/scrum8) | [http://blog.scrum8.com](http://blog.scrum8.com) |  
[http://jobs.scrum8.com](http://jobs.scrum8.com)

---

<div class="post-metadata">

**Author:** ![builtbysimple](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/aca169/32.png) [@builtbysimple](https://www.ruby-forum.com/u/builtbysimple)\
**Post date:** [October 12, 2009, 1:31am UTC](https://www.ruby-forum.com/t/overwriting-default-accessors/177119/2 "2009-10-12T01:31:10Z")

</div>

Joshua P. wrote:

> Hi all,
> 
> Coming from the Java & Hibernate world, I was confused when trying out  
> this piece of line of code:  
> class Task \< ActiveRecord::Base  
> def status=(status)  
> status = ‘P’  
> write\_attribute(:status, status)  
> end  
> end

This won’t quite work. But before I try to improve it…what are you  
trying to do? Set status to P no matter the argument that the function  
is called with?

## Best,

Marnen Laibow-Koser  
[http://www.marnen.org](http://www.marnen.org)  
removed\_email\_address@domain.invalid
