Ruby on Rails:如何在字段为空时自定义MailForm的错误消息

时间:2016-05-12 18:15:53

标签: ruby-on-rails validation message mail-form

目前,如果我将表单中的字段留空,我会收到一条写在en.yml文件中的错误消息,如何在模型中覆盖此错误消息?

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

这是我为name属性尝试过的,但我仍然收到了在en.yml文件中写入的错误消息。我无法更改en.yml中的错误消息,因为它是我应用程序的另一部分。

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

为什么这不会覆盖消息的任何想法?

3 个答案:

答案 0 :(得分:3)

您可以使用i18n本地化自定义错误消息,方法与常规ActiveRecord模型相同。唯一的区别是您使用mail_form顶级范围而不是active_record

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

来源:

答案 1 :(得分: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")

答案 2 :(得分:0)

如果以上答案不起作用(首先尝试出来,导航很好,有错误消息)你可以使用JQuery在提交之前验证字段,有一个插件https://jqueryvalidation.org/

从那里

    $("#myform").validate({
  submitHandler: function(form) {
    // some other code
    // maybe disabling submit button
    // then:
    $(form).submit();
  }
 });