提交 2438a1cf 编写于 作者: A Akshat Sharma

Add case_sensitive option for confirmation validation

Case :- 1. In case of email confirmation one needs case insensitive comparison
        2. In case of password confirmation one needs case sensitive comparison

[ci skip] Update Guides for case_sensitive option in confirmation validation
上级 40e904df
......@@ -58,4 +58,10 @@
*Henrik Nyh*
* Add case_sensitive option for confirmation validator in models.
See #17351
*Akshat Sharma*
Please check [4-1-stable](https://github.com/rails/rails/blob/4-1-stable/activemodel/CHANGELOG.md) for previous changes.
......@@ -3,14 +3,16 @@ module ActiveModel
module Validations
class ConfirmationValidator < EachValidator # :nodoc:
def initialize(options)
super
super({ case_sensitive: true }.merge!(options))
setup!(options[:class])
end
def validate_each(record, attribute, value)
if (confirmed = record.send("#{attribute}_confirmation")) && (value != confirmed)
human_attribute_name = record.class.human_attribute_name(attribute)
record.errors.add(:"#{attribute}_confirmation", :confirmation, options.merge(attribute: human_attribute_name))
if (confirmed = record.send("#{attribute}_confirmation"))
unless confimation_value_equal?(record, attribute, value, confirmed)
human_attribute_name = record.class.human_attribute_name(attribute)
record.errors.add(:"#{attribute}_confirmation", :confirmation, options.merge(attribute: human_attribute_name))
end
end
end
......@@ -24,6 +26,14 @@ def setup!(klass)
:"#{attribute}_confirmation" unless klass.method_defined?(:"#{attribute}_confirmation=")
end.compact)
end
def confimation_value_equal?(record, attribute, value, confirmed)
if !options[:case_sensitive] && value.is_a? String
value.casecmp(confirmed) == 0
else
value == confirmed
end
end
end
module HelperMethods
......@@ -55,6 +65,8 @@ module HelperMethods
# Configuration options:
# * <tt>:message</tt> - A custom error message (default is: "doesn't match
# <tt>%{translated_attribute_name}</tt>").
# * <tt>:case_sensitive</tt> - Looks for an exact match. Ignored by
# non-text columns (+true+ by default).
#
# There is also a list of default options supported by every validator:
# +:if+, +:unless+, +:on+, +:allow_nil+, +:allow_blank+, and +:strict+.
......
......@@ -327,6 +327,16 @@ class Person < ActiveRecord::Base
end
```
There is also a `:case_sensitive` option that you can use to define whether the
confirmation constraint will be case sensitive or not. This option defaults to
true.
```ruby
class Person < ActiveRecord::Base
validates :email, confirmation: { case_sensitive: false }
end
```
The default error message for this helper is _"doesn't match confirmation"_.
### `exclusion`
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册