Which version of Rails are you using? It should add the error to the :password_confirmation
attribute:
[9] pry(main)> class Foo < ApplicationRecord; attribute :password; validates_confirmation_of :password; end => [ActiveModel::Validations::ConfirmationValidator] [10] pry(main)> ff = Foo.new(password: "foo", password_confirmation: "bar"); ff.validate => false [11] pry(main)> ff.errors => #<ActiveModel::Errors [#<ActiveModel::Error attribute=password_confirmation, type=confirmation, options={:attribute=>"Password"}>]> [12] pry(main)> ff.errors[:password_confirmation] => ["doesn't match Password"]
Plot Twist: OP reveals it's Rails 3.2
I'd probably add (something like) this in my controller:
if @model.errors.added? :password, :confirmation @model.errors.add :password_confirmation, :confirmation @model.errors.delete :password, :confirmation end