为什么我不能锁定此记录?
User.transaction do
p current_user.inspect
p "************"
user = current_user.lock!
p "************"
"#<User id: 1, username: ...
"************"
PG::InFailedSqlTransaction: ERROR: current transaction is aborted, commands ignored until end of transaction block
: SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT 1 FOR UPDATE
ActiveRecord::StatementInvalid (PG::InFailedSqlTransaction: ERROR: current transaction is aborted, commands ignored until end of transaction block
: SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT 1 FOR UPDATE):
app/controllers/users_controller.rb:294:in `block in withdrawBTC'
我可以从控制台锁定它。
irb(main):021:0> User.transaction do
irb(main):022:1* u.lock!
irb(main):023:1> end
Rails 4.0.0
答案 0 :(得分:3)
很奇怪,我重新启动了服务器,它越过了那条线。我不知道为什么,因为它处于开发模式。 Rails,你这么片状!
答案 1 :(得分:1)
在这种情况下,它可能不是Rail的错,虽然Rails确实很奇怪而且非常脆弱。
这部分输出:
ERROR: current transaction is aborted, commands ignored until end of transaction block
表示同一事务中的上一个命令失败,并且您的程序(或Rails)忽略了该错误并尝试继续。这不起作用 - 后续命令只会在事务回滚之前失败。