Как переопределить сообщения об ошибках при смене пароля - PullRequest
14 голосов
/ 17 февраля 2012

Как настроить сообщения об ошибках для переопределенного контроллера паролей деления?

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, а не для контроллера пользовательских паролей.

Есть ли решение?

Ответы [ 4 ]

14 голосов
/ 12 декабря 2013

Ответ состоит в том, чтобы изменить 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)"

Благодарность за это достается Вимше, который ответил практически на тот же вопрос для меня.

7 голосов
/ 17 февраля 2012

Сообщения об устройстве находятся в config / locales / devise.en.yml

Я не уверен, какое сообщение вы пытаетесь переопределить, но именно здесь вы хотите это сделать.

0 голосов
/ 08 сентября 2017

Добавьте это в ваши маршруты. Rb

devise_for :users, controllers: { passwords: 'passwords' }

или

devise_for :users, :controllers => { :passwords => 'passwords' }
0 голосов
/ 04 июня 2013

Это не идеально, но на основе этого связанного билета У меня это работает со следующим (что, я знаю, немного хак, но это работает):

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 каталоге

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...