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

Ruby on Rails: How to customise error message for MailForm when field is blank

目前,如果我将表单中的一个字段留空,我会收到写在 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

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

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

知道为什么这不会覆盖消息吗?

您不需要将消息嵌套在内部散列中。验证消息的语法是:

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")

您可以使用 i18n 本地化自定义错误消息,就像对常规 ActiveRecord 模型一样。唯一的区别是您使用 mail_form 顶级范围而不是 active_record.

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

来源:

如果以上答案无效(先尝试一下,rails 可以显示错误消息)您可以使用 JQuery 在提交前验证字段,有一个插件可以解决这个问题https://jqueryvalidation.org/

从那里网站

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