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 回答