Как переопределить сообщения об ошибках при изменении пароля
Как настроить сообщения об ошибках для переопределенного пароля паролей?
class PasswordsController < Devise::PasswordsController
def create
self.resource = resource_class.send_reset_password_instructions(params[resource_name])
if resource.errors.empty?
set_flash_message(:notice, :send_instructions) if is_navigational_format?
respond_with resource, :location => home_path
else
binding.pry
flash[:devise_password_error] = (resource.errors.map do |key, value|
value.capitalize
end).flatten.join('|')
redirect_to home_path and return
end
end
def edit
self.resource = resource_class.new
resource.reset_password_token = params[:reset_password_token]
end
end
resource.errors доступен в этом методе, но он содержит сообщения по умолчанию, такие как Email not found
и Email can't be blank
. Мне нужно настроить эти сообщения. Я попытался удалить :validatable
из моей модели пользователя и добавить специальные валидаторы, но это работает только для моего настраиваемого контроллера регистрации, полученного из Devise:: RegistrationsController, а не для пользовательского контроллера паролей.
Есть ли какое-либо решение?
Ответы
Ответ 1
Ответ заключается в изменении config/locales/devise.en.yml, но вы должны добавить настройки, они по умолчанию отсутствуют.
en:
activerecord:
errors:
models:
user:
attributes:
password:
confirmation: "does not match"
too_short: "is too short (minimum is %{count} characters)"
Кредит для этого идет к Vimsha, который ответил практически тем же question для меня.
Ответ 2
Отладочные сообщения находятся в config/locales/devise.en.yml
Я не уверен, какое сообщение вы пытаетесь переопределить, но это то, где вы хотите это сделать.
Ответ 3
Он не идеален, но основан на этом связанном билете У меня есть работа со следующим (что я знаю, это немного взломать, но он работает ):
module DeviseHelper
def devise_error_messages!
resource.errors.full_messages.map { |msg| msg == 'Email not found' ? 'The email address you entered could not be found. Please try again with other information.' : msg }.join('<br/>')
end
end
Поместите это в модуль под названием devise_helper.rb
в каталог /app/helpers
Ответ 4
Добавьте это на свои маршруты. rb
devise_for :users, controllers: { passwords: 'passwords' }
или
devise_for :users, :controllers => { :passwords => 'passwords' }