http://constancy.rubyforge.org
This Rails plugin allows you to prevent particular database fields from being changed after a record is created. A validation error occurs on updates if an attribute of a model object is different from its value in the database.
Here’s how to use this validation in your code.
class Person < ActiveRecord::Base
# Prevent changes to Person#social_security_number.
validates_constancy_of :social_security_number
end
The validation takes two options, :if and :message. These may be familiar because several of ActiveRecord’s validations also use them. The :if option takes a Proc, or a symbol, or string with a model object argument and a return value of true or false.
class Comment < ActiveRecord::Base
# Prevent changes to Comment#text if it is “locked.”
validates_constancy_of :text, :if => Proc.new { |comment| comment.locked? }
end
The default error message is “can’t be changed”. Use your own error message by specifying the :message option.
class LicensePlate < ActiveRecord::Base
# Prevent changes to LicensePlate#number.
validates_constancy_of :number,
:message => 'is off-limits! What are you thinking?'
end
More than one model attribute can be specified. Any specified options will be applied to all the specified attributes.
With associations, validate the constancy of a foreign key, not the instance variable itself: validates_constancy_of :invoice_id instead of validates_constancy_of :invoice.
Copyright © 2007 NilsJonsson (nils@alumni.rice.edu)
Released under the MIT license.