Module: ActiveRecord::DatabaseValidations::Validations

Defined in:
lib/activerecord/database_validations/validations.rb

Constant Summary collapse

NOT_NULL_IGNORED =
['created_at', 'updated_at']

Instance Method Summary collapse

Instance Method Details

#validates_databaseObject



2
3
4
5
6
# File 'lib/activerecord/database_validations/validations.rb', line 2

def validates_database
  validates_database_not_null
  validates_database_unique
  validates_database_foreign_key
end

#validates_database_foreign_key(options = {}) ⇒ Object



33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/activerecord/database_validations/validations.rb', line 33

def validates_database_foreign_key(options = {})
  foreign_keys.each do |foreign_key|
    model = Class.new(ActiveRecord::Base) do
      self.table_name = foreign_key.to_table
    end
    validate do
      if not self[foreign_key.column].nil? and not model.where(foreign_key.primary_key => self[foreign_key.column]).exists?
        errors.add(foreign_key.column, options[:message] || :inclusion)
      end
    end
  end
end

#validates_database_not_null(options = {}) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# File 'lib/activerecord/database_validations/validations.rb', line 9

def validates_database_not_null(options = {})
  columns.reject(&:null).each do |column|
    next if NOT_NULL_IGNORED.include?(column.name)
    validation = proc do
      if self[column.name].nil?
        errors.add(column.name, options[:message] || :blank)
      end
    end

    if column.extra == 'auto_increment'
      validate(on: :update, &validation)
    else
      validate(&validation)
    end
  end
end

#validates_database_unique(options = {}) ⇒ Object



26
27
28
29
30
31
# File 'lib/activerecord/database_validations/validations.rb', line 26

def validates_database_unique(options = {})
  validates_uniqueness_of(primary_key, **options, allow_nil: true) if primary_key
  indexes.select(&:unique).each do |index|
    validates_uniqueness_of(index.columns[-1], **options, scope: index.columns[0...-1], if: -> { index.columns.none? { |c| self[c].nil? } })
  end
end