Ruby on Rails
Validates Constancy

Validates Constancy for ActiveRecord

http://constancy.rubyforge.org

Introduction

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.

Using constancy validation

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

Options

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.

Warning

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.

Credits

Copyright © 2007 NilsJonsson (nils@alumni.rice.edu)

Released under the MIT license.