2

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

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

4

3 回答 3

4

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

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

来源:

于 2016-05-12T19:16:33.197 回答
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")
于 2016-05-12T18:22:50.110 回答
0

如果上述答案不起作用(先尝试一下,rails 可以很好地显示错误消息),您可以在提交之前使用 JQuery 来验证字段,有一个插件适用于该https://jqueryvalidation.org/

从那里网站

    $("#myform").validate({
  submitHandler: function(form) {
    // some other code
    // maybe disabling submit button
    // then:
    $(form).submit();
  }
 });
于 2016-05-12T19:38:36.293 回答