class Person < ActiveRecord::Base def validate end def validate_on_create end def validate_on_update end end
class Person < ActiveRecord::Base validate :check_n_subjects validate_on_update :check_n_geographic_areas validate_on_create :check_emails_valid def check_n_subjects errors.add(:subjects, "too many subjects") if subjects.size > 7 end def check_n_geographic_areas end def check_emails_valid end end
def valid? errors.clear run_callbacks(:validate) validate if new_record? run_callbacks(:validate_on_create) validate_on_create else run_callbacks(:validate_on_update) validate_on_update end errors.empty? end
person = Person.find(5) person.age = -5 person.save(false) # saves without validation person.update_attribute(:age, -5) # saves without validation
validates_acceptance_of validate_associated validates_confirmation_of validates_each validates_exclusion_of validates_format_of validates_inclusion_of validates_length_of validates_numericality_of validates_presence_of validates_size_of validates_uniqueness_of
class User < ActiveRecord::Base validates_presence_of :name, :email, :password validates_format_of :name, :with => /^\w+$/, :message => "may only contain word characters" validates_uniqueness_of :name, :message => "is already in use" validates_length_of :password, :within => 4..40 validates_confirmation_of :password end
class User < ActiveRecord::Base validates_inclusion_of :role, :in => %w(super admin user), :message => "must be super, admin, or user", :allow_nil => true validates_presence_of :customer_id, :if => Proc.new { |u| %w(admin user).include?(u.role) } validates_numericality_of :weight, :only_integer => true, :allow_nil => true, :greater_than => 0, :less_than => 500 end
class Person < ActiveRecord::Base validates_uniqueness_of :name end peter = Person.create(:name => "Peter") peter2 = Person.create(:name => "Peter") peter2.valid? # => false peter2.errors.on(:name) # => "has already been taken" peter2.errors.full_messages # => ["Name has already been taken"]