gpt4 book ai didi

ruby-on-rails - 在 Ruby On Rails Controller 方法中使用事务

转载 作者:数据小太阳 更新时间:2023-10-29 07:15:56 26 4
gpt4 key购买 nike

我喜欢 Ruby On Rails,每天我都在学习和提高我的技能。目前,我正在开发一个由多个客户使用的应用程序,我想重构我的代码,这样我就可以对我的代码质量充满信心。

我正在为如何实现异常处理和使用事务而苦恼。我有一个必须创建和更新三个对象的 Controller 。为了简化我的情况。

在我的 Controller 中:

def update
@user.change_value_x #(1) effects Model 'User'
if condition == y
@user.create_coupon #(2) effects Model 'Coupon' via Model 'User'
end
create_a_history_item #(3) effect Model 'History'
end

第一个 (1) 和第二个方法 (2) 位于用户模型中,第三个方法 (3) 也被其他 Controller 使用并且位于/lib 目录中的一个模块中。所有方法都在更新/保存/创建数据库项。

如果其中一个操作失败,所有数据库操作都应回滚并提供有关问题的反馈。

我知道“事务”是一个很好的解决方案,而且我在不同的帖子中也指出不应在 Controller 中使用事务。
问题:这是为什么?

所以我猜这段代码不是实现交易的正确方式。

def update
ActiveRecord::Base.transaction do
@user.change_value_x #(1) effects Model 'User'
if condition == y
@user.create_coupon #(2) effects Model 'Coupon' via Model 'User'
end
create_a_history_item #(3) effect Model 'History'
end
rescue
#some code that gives feedback to user about the problem
end

处理此问题的最佳/正确方法是什么?

最佳答案

事务应尽可能保持在模型级别,因为它们与模型相关,而不是与逻辑相关。 Controller 中的事务就像 Controller 中的 SQL 请求:感觉不合适。

话虽这么说,您的解决方案没有任何问题,但也许在您的模型(或服务层)上使用方法有助于保持 Controller 中的内容清洁?例如 User#update_x_and_create_couponUser#update_x_and_create_history_item 等方法。

关于ruby-on-rails - 在 Ruby On Rails Controller 方法中使用事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30768344/

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