Skip to content

Commit 4433b1a

Browse files
committed
Support i18n attributes for confirmation
1 parent 3a749a9 commit 4433b1a

File tree

3 files changed

+23
-3
lines changed

3 files changed

+23
-3
lines changed

activemodel/lib/active_model/validations/confirmation.rb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@ module Validations
55
class ConfirmationValidator < EachValidator
66
def validate_each(record, attribute, value)
77
if (confirmed = record.send("#{attribute}_confirmation")) && (value != confirmed)
8-
record.errors.add(:"#{attribute}_confirmation", :confirmation, options.merge(:attribute => attribute))
8+
human_attribute_name = record.class.human_attribute_name(attribute)
9+
record.errors.add(:"#{attribute}_confirmation", :confirmation, options.merge(:attribute => human_attribute_name))
910
end
1011
end
1112

activemodel/test/cases/validations/confirmation_validation_test.rb

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,12 +44,31 @@ def test_validates_confirmation_of_for_ruby_class
4444
p.karma_confirmation = "None"
4545
assert p.invalid?
4646

47-
assert_equal ["doesn't match karma"], p.errors[:karma_confirmation]
47+
assert_equal ["doesn't match Karma"], p.errors[:karma_confirmation]
4848

4949
p.karma = "None"
5050
assert p.valid?
5151
ensure
5252
Person.reset_callbacks(:validate)
5353
end
5454

55+
def test_title_confirmation_with_i18n_attribute
56+
@old_load_path, @old_backend = I18n.load_path.dup, I18n.backend
57+
I18n.load_path.clear
58+
I18n.backend = I18n::Backend::Simple.new
59+
I18n.backend.store_translations('en', {
60+
:errors => {:messages => {:confirmation => "doesn't match %{attribute}"}},
61+
:activemodel => {:attributes => {:topic => {:title => 'Test Title'}}}
62+
})
63+
64+
Topic.validates_confirmation_of(:title)
65+
66+
t = Topic.new("title" => "We should be confirmed","title_confirmation" => "")
67+
assert t.invalid?
68+
assert_equal ["doesn't match Test Title"], t.errors[:title_confirmation]
69+
70+
I18n.load_path.replace @old_load_path
71+
I18n.backend = @old_backend
72+
end
73+
5574
end

activemodel/test/cases/validations/i18n_validation_test.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ def test_errors_full_messages_uses_format
8181
test "validates_confirmation_of on generated message #{name}" do
8282
Person.validates_confirmation_of :title, validation_options
8383
@person.title_confirmation = 'foo'
84-
@person.errors.expects(:generate_message).with(:title_confirmation, :confirmation, generate_message_options.merge(:attribute => :title))
84+
@person.errors.expects(:generate_message).with(:title_confirmation, :confirmation, generate_message_options.merge(:attribute => 'Title'))
8585
@person.valid?
8686
end
8787
end

0 commit comments

Comments
 (0)