2012-02-17 20 views
6

私のアプリでは、認証エンジンとしてdeviseを使用しています。 devise検証に失敗した場合にカスタムメッセージを使用する方法はありますか? パスワードが空白の場合、Deviseは私に次のメッセージを表示します:Password can't be blank、別のメッセージが必要です。どうすればいいですか?検証が失敗したときにカスタムメッセージを作成する

答えて

22

のActiveRecord en.yml私はあなたがここに工夫

の検証メッセージを変更したい場合はどのように専用であることをお勧め答えです。 ymlは次のように表示されます。

あなたは上記のアプローチに従うならば、あなたが代わりに検証モジュール

を考案カスタマイズするのをこのように定義するdviceがあるので、私が上記の工夫を削除するには、検証に例のための場所または2

をスキップすることを可能でしょうその後、検証モジュールと ユーザーモデル

その後、すべての検証がために働くだろうが、あなたのパスワードは決して与え、決してたにもかかわらず、ログインしたことにより、パスワードの変更はあり

に検証を逃すで独自のsubstitue与えられた

それも

チアー

よろしくのループをキープ

+0

これはどこですか? 'config/locals/en.yml'? – ahnbizcad

+0

「上記の妥当性検証モジュール」を取り除いて、ユーザーモデルにあなた自身を補完することはどういう意味ですか?まず、上記の妥当性検証モジュールはありません。上に書いたのは、en.ymlファイルであり、devise.en.ymlファイルではありません。さらに、devise.en.ymlファイルでさえ検証モジュールではありません。あなたはdevise.en.ymlコードをどのようにUserモデルに入れることができますか?それは丸い穴に四角いペグのようなものです。 「そのループを維持する」とはどういう意味ですか? 「パスワード変更」の検証をスキップすると、無限ループに入りますか? – ahnbizcad

+0

別の質問:私はこのymlメッセージはメッセージであり、実際の検証ではないと考えました。なぜ彼らがバリデーションをバイパスするのでしょうか?多分私の提案された編集内容はあなたの意図したものではないかもしれませんが、とにかく前には明らかではありませんでした。 – ahnbizcad

0

完全な答えではありませんが、これはdevise-internalキーを使用してI18nで解くか、アクティブなレコードの検証エラーメッセージをユーザーモデルにオーバーライドする必要があります。

ここで同様の質問です:Devise attributes for i18n?

2

は下記URLをご参照ください。

http://railscasts.com/episodes/210-customizing-devise?view=asciicast

ユーザーがサインインされている場合は、config/localesdevise.en.yml内のすべてのエラーメッセージを編集することができます。

あなたがサインアップしている場合、Deviseはカスタマイズなしで独自の検証を提供します。カスタマイズする場合は、Userモデルを編集できます。

devise :validatableを見つけ、:validatableオプションを削除します。その後、通常のレールバリデーションを使用できるはずです。これにより、すべての検証を自分で行う必要があることに注意してください。

validates_presence_of :password, :message=>"Your custom error message!"

いくつかの通常の検証:

validates_confirmation_of :password 
    validates_presence_of :password, :on => :create 
    validates_presence_of :email 
    validates_uniqueness_of :email 
0

あなたはその後、検証メッセージに変更したい場合は、設定/ロケール/ devise.en.ymlからあなたの工夫メッセージをカスタマイズすることができますが、 delete:Modelから検証可能です。その後、前と同じように検証メッセージを変更することができます。 例:

validates_uniqueness_of :email,  :case_sensitive => false, :allow_blank => true, :if => :email_changed? 
validates_format_of :email, :with => Devise.email_regexp, :allow_blank => true, :if => :email_changed? 

validates_presence_of :password, :on=>:create 
validates_confirmation_of :password, :on=>:create 
validates_length_of :password, :within => Devise.password_length, :allow_blank => true 
関連する問題