Learn by Doing
2009-Jul-02 20:19 UTC
Prevent attribute from being changed with "attr_readonly"
Is there a way to prevent an attribute from being changed from outside the class instance? So that after a record is created, the attribute can be read but cannot be changed from outside the class instance. At first glance, "attr_readonly" seems to be the solution. However, will "attr_readonly" also prevent the attribute from being changed even from inside the class? In other words, will the following method successfully change the values of attribute_a and attribute_b in model A? 1.Class A < ActiveRecord::Base 2. attr_readonly :attribute_a, :attribute_b 3. def change_attributes(new_a, new_b) 4. self.attribute_a = new_a 5. self.attribute_b = new_b 6. save! 7. end 8. end I know I can redefine the write accessor if I want to customize the way a single attribute is changed. However here I would like to change two attributes in one transaction and prevent each attribute from being changed individually. Thanks -------------------------------------------------------------------------------- Developing with Rails 2.3.2; Ruby 1.8.7 (2009-04-08 patchlevel 160) [powerpc-darwin9] -- Posted via http://www.ruby-forum.com/.
Learn by Doing
2009-Jul-03 07:53 UTC
Re: Prevent attribute from being changed with "attr_readonly"
I tried to make private the write accessor for an attribute (e.g., foo) that I want to protect by defining: Code : - fold - unfold 1. def foo=val 2. super 3. end However, when I make the write accessor private, I cannot even call it from inside the class because a statement such as self.foo = val returns NoMethodError: Attempt to call private method Please help. Thanks. -- Posted via http://www.ruby-forum.com/.