сообщение проверки электронной почты devise не показывает имя атрибута - PullRequest
0 голосов
/ 31 октября 2019

Я пытаюсь настроить сообщение проверки устройства для моей модели пользователя, столбец уникальности - электронная почта.

В настоящее время отображается сообщение об ошибке Email has already been taken, я хочу показать сообщение типа Trial account already assigned for this email. Я не хочу, чтобы ключ атрибута показывался в сообщении об ошибке, и хочу отобразить пользовательское сообщение.

ниже приведены несколько вещей, которые я пробовал из постов, которые я проверил, самые близкие, которые я получил до сих порэто

я пытался обновить en.yml, как показано ниже

  activerecord:
      user:
        email: ''
    errors:
      models:
        user:
          attributes:
            email:
              taken: 'Trial account already assigned for this email'

Но проблема с приведенным выше кодом связана с помощниками формы рельсов, это также не показывает метку, когда поле является электронной почтой,он закрывает имя метки.

Я также проверил другие сообщения на SO, такие как

Сообщение проверки переопределения Rails - добавление нескольких сообщений проверки для электронной почты, так как я могу проверить. module

Я также нашел другую альтернативу, как упомянуто здесь Где я могу изменить сообщение об ошибке «Электронная почта уже была получена»?

activerecord:
    errors:
      messages:
        taken: "Trial account already assigned for this email"

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

Любая помощь по достижению этого будет очень признательна. Спасибо.

1 Ответ

0 голосов
/ 31 октября 2019

Может быть более чистое решение, но вы могли бы сделать следующее:

В вашем RegistrationsController переопределить create для доступа к пользовательской модели после первоначальной проверки

  def create
    super do |u|
      override_taken_error(u)
    end
  end

(См. https://github.com/plataformatec/devise/blob/master/app/controllers/devise/registrations_controller.rb#L16)

Затем внедрите override_taken_error, чтобы удалить ошибку :taken из атрибута :email и добавить пользовательскую ошибку в атрибут :base:

user.errors.add :base, t('Trial account already assigned for this email')

Недостатком является то, что ошибка не будет напрямую связана с полем электронной почты, но, по крайней мере, вы можете сделать повторно используемую override_taken_error - вы даже можете использовать ее в хуке жизненного цикла ActiveRecord, например after_save или что-то в этом роде. .

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