module ActiveRecord::Validations::ClassMethods

Public Instance Methods

validates_columns(*column_names) click to toggle source

Automatically validates the column against the schema definition for nullability, format, and enumerations. Handles integers, floats, enumerations, and string limits.

Usage: validates_columns :severity, :name

# File lib/enum/validations.rb, line 10
def validates_columns(*column_names)
  begin
    cols = columns_hash
    column_names.each do |name|
      col = cols[name.to_s]
      raise ArgumentError, "Cannot find column #{name}" unless col
      
      # test for nullability
      validates_presence_of(name) if !col.null
      
      # Test various known types.
      case col.type
      when :enum
        validates_inclusion_of name, :in => col.limit, :allow_nil => true
        
      when :integer, :float
        validates_numericality_of name, :allow_nil => true
        
      when :string
        if col.limit
          validates_length_of name, :maximum => col.limit, :allow_nil => true
        end
      end
    end
  rescue ActiveRecord::StatementInvalid=>e
    raise e unless e.message.include?("42S02") # swallow the exception if its for a missing table
  end
end