API 调用以在保存之前验证字段,这是在before_save上还是在控制器内部完成?



前言:

在我的应用程序中,我有一个名为Order的模型,其中包含一个第三方order_id,我需要在保存之前对其进行验证。为了验证 id 是否正确,我对其订单验证端点进行了 API 调用。

问题:

我应该在 rails 应用程序中的什么位置执行此验证?我的第一个合乎逻辑的选择是控制器:

def create
order_id = params[:joint_membership_application][:order_id]
# API call to check order status, true = order ID is verified
if @client.order_valid?(order_id)
@membership_app = JointMembershipApplication.create!(membership_app_params)
# ...
end

但我总是读到业务逻辑应该存在于模型中,而不是控制器中。在模型的before_save回调中进行 API 调用是否是一种不好的做法?如果我将此逻辑放在模型中,则需要在保存时实例化 API 客户端,这似乎有点奇怪。

我很可能想多了,但想听听有铁路经验的人说我应该在哪里执行这种验证。谢谢!

我会把它放在控制器中,并使用 Sidekiq 异步执行验证(将逻辑移动到工作线程中(。

最新更新