Rails surprisingly does not include a validation method to make a model attribute immutable. (That is, the attribute can not be changed after it is set the first time.) I created this validation plugin to help that.
To install:
script/plugin install git://github.com/wmoxam/immutable-attribute-plugin.git
To use, drop this in your model:
ensures_immutability_of :attribute_name
You can specify multiple immutable attributes in one line:
ensures_immutability_of :attribute1, :attribute2
Now if something attempts to set a protected attribute, it will raise an error. For example:
class Account < ActiveRecord::Base
ensures_immutability_of :username, :email
end
account = Account.create(:username => 'jgreen')
...
account.update(:username => 'jgreen') # raises ActiveRecord::ImmutableAttributeError
This plugin works especially nicely with the "Email Veracity Plugin": If you have an email-verification process (such as sending an activation email) then you will most likely want to mark the email attribute as immutable, and create new records for when users add other email addresses.
But this is probably most excellent for username and relationship attributes (foreign key fields). That is exactly how we are using it on Languify
Post Comments
wmoxam said – Mon, 01 Dec 2008 02:37:57 -0000 ( Flag Edit Link )
Hrmm, which version of Rails are you using?
We’ve been using the plugin on Rails v2.0 & 2.1 and haven’t encountered this problem before …