Flowdock
method

validates_inclusion_of

Importance_4
v2.1.0 - Show latest stable - 3 notes - Class: ActiveModel::Validations::ClassMethods
validates_inclusion_of(*attr_names) public

Validates whether the value of the specified attribute is available in a particular enumerable object.

  class Person < ActiveRecord::Base
    validates_inclusion_of :gender, :in => %w( m f ), :message => "woah! what are you then!??!!"
    validates_inclusion_of :age, :in => 0..99
    validates_inclusion_of :format, :in => %w( jpg gif png ), :message => "extension %s is not included in the list"
  end

Configuration options:

  • :in - An enumerable object of available items
  • :message - Specifies a custom error message (default is: "is not included in the list")
  • :allow_nil - If set to true, skips this validation if the attribute is null (default is: false)
  • :allow_blank - If set to true, skips this validation if the attribute is blank (default is: false)
  • :if - Specifies a method, proc or string to call to determine if the validation should occur (e.g. :if => :allow_validation, or :if => Proc.new { |user| user.signup_step > 2 }). The method, proc or string should return or evaluate to a true or false value.
  • :unless - Specifies a method, proc or string to call to determine if the validation should not occur (e.g. :unless => :skip_validation, or :unless => Proc.new { |user| user.signup_step <= 2 }). The method, proc or string should return or evaluate to a true or false value.
Show source
Register or log in to add new notes.
August 25, 2008
5 thanks

%w(true false) != [true, false]

Don´t confuse the right:

validates_inclusion_of :published, :in => [true, false]

with the wrong:

validates_inclusion_of :published, :in => %w(true false)

cause:

%w(true false) == ["true", "false"]
February 23, 2009
2 thanks

Check if value is included in array of valid values

If you want to check the value of an attribute using an array of valid values, the array has to be defined before the validation, so

validates_inclusion_of :name, :in => VALID_NAMES
VALID_NAMES = %w(Peter Paul Mary)

won’t work, but

VALID_NAMES = %w(Peter Paul Mary)
validates_inclusion_of :name, :in => VALID_NAMES

will.

November 18, 2009
0 thanks

Be careful with float ranges

Pay close attention to the fact that the object passed to :in must be enumerable.

If you want to validate a ranking, the following won’t work:

validates_inclusion_of :rating, :in => (0.0..10.0)

Instead, you’ll want to use validates_numericality_of like this:

validates_numericality_of :rating, :greater_than_or_equal_to => 0.0, :less_than_or_equal_to => 10.0