2016-05-12 1 views
3

На данный момент, если я оставляю поле в форме пустым, я получаю сообщение об ошибке, написанное в файле en.yml, как я могу перезаписать это сообщение об ошибке в модели?Ruby on Rails: как настроить сообщение об ошибке для MailForm, когда поле пуста

class Contact < MailForm::Base 
    attribute :name,  :validate => true 
    attribute :email,  :validate => /\A([\w\.%\+\-]+)@([\w\-]+\.)+([\w]{2,})\z/i 
    attribute :message, :validate => true 
    attribute :nickname, :captcha => true 

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

validates :name, presence: { message: "Can't be blank" } 

Любые идеи, почему это не переписывает сообщение?

ответ

3

Вы можете настроить сообщение об ошибке, используя локализацию i18n так же, как и для обычной модели ActiveRecord. Единственное различие заключается в том, что вы используете область верхнего уровня mail_form вместо active_record.

# en.yml 
mail_form: 
    errors: 
     models: 
     contact: 
      attributes: 
       name: 
        blank: "My custom message goes here" 

источники:

0

Вам не нужно вставлять сообщение во внутренний хэш. Синтаксис для сообщений на валидациях является:

attribute :name, validate: true 

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

contact = Contact.new 
contact.valid? # => false 
contact.errors[:name] = "Can't be blank" # => Will add "Can't be blank to the list of errors associated with name" 

Или, если вы хотите, чтобы заменить оригинальную ошибку:

contact.errors.set(:name, "Can't be blank") 
+0

Это просто дал мне ошибку: Неизвестный валидатор: «MessageValidator» – ChatNoir

+0

Ты прав, я думал, что вы расширяли 'ActiveRecord :: Base'. Я обновил свой ответ. –

+0

Это не повлияло – ChatNoir

0

Если приведенные выше ответы не работают (попробуйте их первый, рельсы хорошо с сообщениями об ошибках), которые вы могли бы использовать JQuery для проверки полей перед подачей, имеется плагин для этого https://jqueryvalidation.org/

Оттуда сайт

$("#myform").validate({ 
    submitHandler: function(form) { 
    // some other code 
    // maybe disabling submit button 
    // then: 
    $(form).submit(); 
    } 
}); 
Смежные вопросы