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