2016-05-12 61 views
3

此刻,如果我将表单中的某个字段留空,我会收到一条写入en.yml文件的错误消息,我该如何才能在模型中覆盖此错误消息?Ruby on Rails:当字段为空时,如何自定义MailForm的错误消息

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

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

回答

3

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

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

来源:

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

这正好给了我一个错误:未知的验证:“MessageValidator” – ChatNoir

+0

你说得对,我还以为你延长'的ActiveRecord :: Base'。我已经更新了我的答案。 –

+0

这没有效果 – ChatNoir

0

如果以上答案是不工作(试出来第一,Rails是一个很好的与错误讯息),你可以使用jQuery验证提交之前的字段,有一个插件的那https://jqueryvalidation.org/

从那里现场

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