如何找到ActiveRecord的ROLLBACK的原因原因、ActiveRecord、ROLLBACK

2023-09-08 16:01:00 作者:旧事酒浓

在日志中我看到一个 ROLLBACK ,但没有记录异常。有没有办法找出是什么原因造成的ROLLBACK?

下面是日志的摘录:

 手机负荷(0.4ms)选择电话。*从手机WHERE手机,ID= $ 1 LIMIT 1 [身份证,980190963]
   (为0.2ms)BEGIN
  用户负载(0.4ms)选择用户。*从用户WHERE的用户。phone_id= 980190963 LIMIT 1
   (为0.2ms)ROLLBACK
  电话负载(0.4ms)选择电话。*从手机WHERE手机,ID= $ 1 LIMIT 1 [身份证,980190963]
  用户负载(0.4ms)选择用户。*从用户WHERE的用户。phone_id= 980190963 LIMIT 1
 
yii active record多表关联查询的一些细节

解决方案

一种方式是手工信息写入日志。尝试像这样从你的控制器:

  Rails.logger.info(@ your_object.errors.inspect)
 

这应该输出所有失败验证的内容。

In the logs I'm seeing a ROLLBACK, but no exception is logged. Is there a way to find out what caused the ROLLBACK?

Here's the excerpt of the log:

  Phone Load (0.4ms)  SELECT "phones".* FROM "phones" WHERE "phones"."id" = $1 LIMIT 1  [["id", 980190963]]
   (0.2ms)  BEGIN
  User Load (0.4ms)  SELECT "users".* FROM "users" WHERE "users"."phone_id" = 980190963 LIMIT 1
   (0.2ms)  ROLLBACK
  Phone Load (0.4ms)  SELECT "phones".* FROM "phones" WHERE "phones"."id" = $1 LIMIT 1  [["id", 980190963]]
  User Load (0.4ms)  SELECT "users".* FROM "users" WHERE "users"."phone_id" = 980190963 LIMIT 1

解决方案

One way is to manually write information to the log. Try something like this from your controller:

Rails.logger.info(@your_object.errors.inspect) 

That should output the content of all validations that failed.