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
- #validates_database ⇒ Object
- #validates_database_foreign_key(options = {}) ⇒ Object
- #validates_database_not_null(options = {}) ⇒ Object
- #validates_database_unique(options = {}) ⇒ Object
Instance Method Details
#validates_database ⇒ Object
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( = {}) 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, [: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( = {}) 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, [: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( = {}) validates_uniqueness_of(primary_key, **, allow_nil: true) if primary_key indexes.select(&:unique).each do |index| validates_uniqueness_of(index.columns[-1], **, scope: index.columns[0...-1], if: -> { index.columns.none? { |c| self[c].nil? } }) end end |