mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Merge pull request #18439 from mokhan/validates-acceptance-of-array
allow '1' or true for acceptance validation.
This commit is contained in:
commit
72570ea289
3 changed files with 18 additions and 2 deletions
|
@ -1,3 +1,9 @@
|
|||
* Change validates_acceptance_of to accept true by default.
|
||||
|
||||
The default for validates_acceptance_of is now "1" and true.
|
||||
In the past, only "1" was the default and you were required to add
|
||||
accept: true.
|
||||
|
||||
* Remove deprecated `ActiveModel::Dirty#reset_#{attribute}` and
|
||||
`ActiveModel::Dirty#reset_changes`.
|
||||
|
||||
|
|
|
@ -3,12 +3,12 @@ module ActiveModel
|
|||
module Validations
|
||||
class AcceptanceValidator < EachValidator # :nodoc:
|
||||
def initialize(options)
|
||||
super({ allow_nil: true, accept: "1" }.merge!(options))
|
||||
super({ allow_nil: true, accept: ["1", true] }.merge!(options))
|
||||
setup!(options[:class])
|
||||
end
|
||||
|
||||
def validate_each(record, attribute, value)
|
||||
unless value == options[:accept]
|
||||
unless acceptable_option?(value)
|
||||
record.errors.add(attribute, :accepted, options.except(:accept, :allow_nil))
|
||||
end
|
||||
end
|
||||
|
@ -20,6 +20,10 @@ module ActiveModel
|
|||
klass.send(:attr_reader, *attr_readers)
|
||||
klass.send(:attr_writer, *attr_writers)
|
||||
end
|
||||
|
||||
def acceptable_option?(value)
|
||||
Array(options[:accept]).include?(value)
|
||||
end
|
||||
end
|
||||
|
||||
module HelperMethods
|
||||
|
|
|
@ -65,4 +65,10 @@ class AcceptanceValidationTest < ActiveModel::TestCase
|
|||
ensure
|
||||
Person.clear_validators!
|
||||
end
|
||||
|
||||
def test_validates_acceptance_of_true
|
||||
Topic.validates_acceptance_of(:terms_of_service)
|
||||
|
||||
assert Topic.new(terms_of_service: true).valid?
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue