1

Eloquent Ruby という本で明確に説明されているデザイン パターンの実行を使用して、Rails アプリケーションの検証エラーをログに記録しました。

私は以下を使用してエラーをキャプチャしています:

@o.errors.full_messages   #{:first_name=>["can't be blank"]}

それらをログテーブルに永続化しますが、エラーの原因となった実際のメソッド/コードもキャプチャしたいと思います。例えば:

User.create(:last_name => "Doe")

エラーの原因となったメソッドをどのようにキャプチャして、検証ログ テーブルに記録できるでしょうか。

4

1 に答える 1

1

Rails 3.2の場合、これが必要かどうかはよくわかりません:

irb(main):008:0> user = User.create()

それからエラーが発生します:

irb(main):009:0> user.errors
=> #<ActiveModel::Errors:0xaa84c60 @base=#<User id: nil, email: "", encrypted_password: "", reset_password_token: nil, reset_password_sent_at: nil, remember_created_at: nil, sign_in_count: 0, current_sign_in_at: nil, last_sign_in_at: nil, current_sign_in_ip: nil, last_sign_in_ip: nil, created_at: nil, updated_at: nil, first_name: nil, last_name: nil, role: "user", approved: false>, @messages={:email=>["can't be blank"], :password=>["can't be blank"]}>

それらは応答の最後にあります。

また、ユーザーを変数に保存せずに、作成アクションでエラーを呼び出すこともできます。

irb(main):010:0> User.create().errors
   (0.3ms)  BEGIN
   (0.1ms)  ROLLBACK
=> #<ActiveModel::Errors:0xa390d78 @base=#<User id: nil, email: "", encrypted_password: "", reset_password_token: nil, reset_password_sent_at: nil, remember_created_at: nil, sign_in_count: 0, current_sign_in_at: nil, last_sign_in_at: nil, current_sign_in_ip: nil, last_sign_in_ip: nil, created_at: nil, updated_at: nil, first_name: nil, last_name: nil, role: "user", approved: false>, @messages={:email=>["can't be blank"], :password=>["can't be blank"]}>

最後に、エラーのある同じハッシュを取得します。

@messages={:email=>["can't be blank"], :password=>["can't be blank"]}
于 2013-06-30T06:39:55.047 に答える