Professional Documents
Culture Documents
This validation will not fail if the association hasn't been assigned. If you want to ensure :minimum The minimum size of the attribute
that the association is both present and guaranteed to be valid, you also need to use :maximum The maximum size of the attribute
validates_presence_of
validates_confirmation_of :is The exact size of the attribute
Encapsulates the pattern of wanting to validate a password or email address field with a :within A range specifying the minimum and maximum size of the attribute
confirmation. Example: :in Alias for :within
Model class Person < ActiveRecord::Base :too_long The error message if the attribute goes over the maximum (default
validates_confirmation_of :user_name, :password is: "is too long (maximum is %d characters)")
validates_confirmation_of :email_address, :message => "should :too_short The error message if the attribute goes under the minimum (default
match confirmation" is: "is too short (min is %d characters)")
end :wrong_length The error message if using the :is method and the attribute is the
View <%= password_field "person", "password" %> wrong size (default is: "is the wrong length (should be %d
<%= password_field "person", "password_confirmation" %> characters)")
:tokenizer Specifies how to split up the attribute string. (e.g. :tokenizer =>
The added password_confirmation attribute is virtual: it exists only as an in-memory lambda {|str| str.scan(/\w+/)} to count words as in above
attribute for validating the password. To achieve this, the validation adds accessors to the example.) Defaults to lambda{ |value| value.split(//) } which
model for the confirmation attribute. This check is performed only if password_confirma- counts individual characters
tion is not nil, and by default only on save. To require confirmation, make sure to add a
presence check for the confirmation attribute: validates_numericality_of
validates_presence_of :password_confirmation, :if => :password_changed Validates whether the value of the specified attribute is numeric by trying to convert
validates_each it to a float with Kernel.Float (if only_integer is false) or applying it to the regular
expression /\A[+\-]?\d+\Z/ (if only_integer is set to true).
Validates each attribute against a block.
validates_numericality_of :age, :greater_than => 18
validates_each :first_name, :last_name do |record, attr, value|
record.errors.add attr, 'starts with z.' if value[0] == ?z :only_integer Specifies whether the value has to be an integer, e.g. an integral
end value (default is false)
validates_exclusion_of :greater_than Specifies the value must be greater than the supplied value
Validates that the value of the specified attribute is not in a particular enumerable object. :greater_than_ Specifies the value must be greater than or equal the supplied
validates_exclusion_of :username, :in => %w( admin superuser ), :message or_equal_to value
=> "You don't belong here" :equal_to Specifies the value must be equal to the supplied value
validates_exclusion_of :age, :in => 30..60, :message => "This site is :less_than Specifies the value must be less than the supplied value
only for under 30 and over 60"
validates_exclusion_of :format, :in => %w( mov avi ), :message => "exten- :less_than_or_ Specifies the value must be less than or equal the supplied value
sion %s is not allowed" equal_to
:odd Specifies the value must be an odd number
:in An enumerable object of items that the value shouldn't be part of
:even Specifies the value must be an even number
validates_format_of
validates_presence_of
Validates whether the value of the specified attribute is of the correct form by matching it
against the regular expression provided. Validates that the specified attributes are not blank (as defined by blank?). Happens by
default on save.
validates_format_of :email, :with => /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]
{2,})\Z/i, :on => :create validates_presence_of :first_name
Note: use \A and \Z to match the start and end of the string, ^ and $ match the start/end The first_name attribute must be in the object and it cannot be blank.
of a line. If you want to validate the presence of a boolean field (where the real values are true
A regular expression must be provided or else an exception will be raised. and false), you will want to use validates_inclusion_of :field_name, :in =>
[true, false] This is due to the way blank? handles boolean values.
:with The regular expression used to validate the format with
validates_size_of
validates_inclusion_of Alias for validates_length_of
Validates whether the value of the specified attribute is available in a particular enumer- validates_uniqueness_of
able object. Validates whether the value of the specified attributes are unique across the system.
validates_inclusion_of :gender, :in => %w( m f ), :message => "woah! what Useful for making sure that only one user can be named "davidhh".
are you then!??!!" validates_uniqueness_of :user_name
validates_inclusion_of :age, :in => 0..99
validates_inclusion_of :format, :in => %w( jpg gif png ), :message => It can also validate whether the value of the specified attributes are unique based on
"extension %s is not included in the list"
multiple scope parameters. For example, making sure that a teacher can only be on the
schedule once per semester for a particular class.
:in An enumerable object of items that the value shouldn't be part of validates_uniqueness_of :teacher_id, :scope => [:semester_id, :class_
id]
validates_length_of
When the record is created, a check is performed to make sure that no record exists in
Validates that the specified attribute matches the length restrictions supplied. Only one the database with the given value for the specified attribute (that maps to a column).
option can be used at a time: When the record is updated, the same check is made but disregarding the record itself.
validates_length_of :first_name, :maximum => 30
Because this check is performed outside the database there is still a chance that dupli-
validates_length_of :last_name, :maximum => 30, :message=>"less than %d cate values will be inserted in two parallel transactions. To guarantee against this you
if you don't mind" should create a unique index on the field. See add_index for more information.
validates_length_of :fax, :in => 7..32, :allow_nil => true
validates_length_of :phone, :in => 7..32, :allow_blank => true :scope One or more columns by which to limit the scope of the unique-
validates_length_of :user_name, :within => 6..20, :too_long => "pick a ness constraint
shorter name", :too_short => "pick a longer name" :case_sensitive Looks for an exact match. Ignored by non-text columns (false by
validates_length_of :fav_bra_size, :minimum => 1, :too_short => "please default)
enter at least %d character"
Example
def validate_on_update
errors.add_to_base("No changes have occurred") if unchanged_attri-
butes?
end
end