2016-05-12 85 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(); 
    } 
}); 
相關問題