1

新しいユーザーを作成するためにデバイスの RegistrationsController をサブクラス化し、スーパークラスの「作成」メソッドを呼び出す前にいくつかのロジックを追加しました。したがって、次のようなものです:

class RegistrationsController < Devise::RegistrationsController

デフォルト作成

スーパーエンド

スーパークラスでエラーが発生したかどうかは、resource.errors.nil? を確認することでわかります。ただし、さまざまなエラーを区別したいと思います。たとえば、エラーが「電子メールは既に取得されています」である場合と、他のエラーが返された場合は、別のことをしたいと考えています。

文字列を解析できますが、それは壊れやすいようです。ActiveRecord または Devise の将来のアップグレードで文字列が変更された場合はどうなりますか? 文字列が予期しない方法でローカライズされた場合はどうなりますか?

文字列の解析よりも優雅にdeviseでエラー処理を処理している人はいますか?

4

3 に答える 3

0

devise_error_messagesヘルパーは、オブジェクトとして割り当てたresourceもの(インストールジェネレーターを実行したユーザーモデル)に付随するエラーを実行しているだけであることに注意してください。

これで、ヘルパーでエラーメッセージを出力するだけでなく、コントローラーメソッドでキーにアクセスすることもできます。

 # in RegistrationsController
 def create
   build_resource
   unless resource.valid?
     if resource.errors.has_key?(:my_error_key)
       # do something
     end
   end
 end

もちろん、これは単なる例ですが、うまくいけば、あなたが取るかもしれないアプローチを示しています。

于 2012-11-01T14:44:47.853 に答える
0

デフォルトのエラーについては、devise.en.yml を変更できます。

于 2012-11-01T14:24:33.557 に答える