目前,如果我将表单中的字段留空,我会收到一条写在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" }
为什么这不会覆盖消息的任何想法?
答案 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();
}
});