gpt4 book ai didi

ruby-on-rails - 如何回滚Rails保存/交易?

转载 作者:行者123 更新时间:2023-12-04 06:06:59 26 4
gpt4 key购买 nike

在我的 Controller 中,我有一些类似的代码...

...
if user.save
something = Something.where("thing = ?", thing)
if !(something.nil?)
render json: { something: something }
else
#I WOULD LIKE TO ROLLBACK THE user.save HERE
end
else
render json: { error: user.errors.full_messages }, status: :bad_request
end

我试过了
raise ActiveRecord::Rollback, "Could not create new User, Something was not found."
render json: { error: "Could not create new User, Something was not found"}, status: :unprocessable_entity

代替上面的ROLLBACK COMMENT区域,但这不起作用。 user.save最终完成。它向“rails s”吐出一些东西,但不会回滚上一个事务。

最佳答案

如果您想以与您提到的相同的方式使用交易,则可以执行以下操作

User.transaction do
if user.save
something = Something.where("thing = ?", thing)
if !(something.nil?)
render json: { something: something }
else
raise ActiveRecord::Rollback
end
else
render json: { error: user.errors.full_messages }, status: :bad_request
end
end

不知道将响应包装在事务中是否行得通,但是您需要对其进行测试。

PS:
这两行
something = Something.where("thing = ?", thing)
if !(something.nil?)

只是相当于
if Something.exists?(thing: thing)

关于ruby-on-rails - 如何回滚Rails保存/交易?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28649331/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com