2016-05-12 10 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 

これはname属性を試したものですが、en.ymlファイルに書き込まれたエラーメッセージがまだ表示されています。私はアプリケーションの別の部分のために、私はエラーメッセージをen.ymlから変更することはできません。

validates :name, presence: { message: "Can't be blank" } 

このメッセージが上書きされない理由は何ですか?

答えて

3

i18nローカライゼーションを使用して、通常のActiveRecordモデルと同じ方法でエラーメッセージをカスタマイズできます。唯一の違いはactive_recordの代わりにmail_form最上位スコープを使用することです。

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

ソース:

0

メッセージを内側のハッシュにネストする必要はありません。未

attribute :name, validate: true 

非常にエレガントな、しかし、あなたは手動でエラーメッセージを設定することができます:検証上のメッセージの構文は次のとおりです

contact.errors.set(:name, "Can't be blank") 
:あなたは元のエラーを交換したい場合は、

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" 

しますか、

+0

これはちょうど私にエラーを与えた:不明なバリデータを「MessageValidator」を – ChatNoir

+0

あなたが右、私はあなたが 'のActiveRecord :: Base'を延長したと思っています。私は私の答えを更新しました。 –

+0

これは効果がありませんでした – ChatNoir

0

上記の答えが機能しない場合(エラーメッセージで良いです最初、レールにそれらを試してみる)あなたはjQueryのを使用することができます送信前にフィールドを検証するには、そのプラグインがあります。https://jqueryvalidation.org/

0123そこのサイトから

$("#myform").validate({ 
    submitHandler: function(form) { 
    // some other code 
    // maybe disabling submit button 
    // then: 
    $(form).submit(); 
    } 
}); 
関連する問題