SuperAPI AI 工具集

spree-workflows

办公与效率

查看项目

更新于 10-16 08:10

技能介绍

用途:在 Spree 6 业务流程中插入自定义代码,例如拦截加购、阻止结账完成、执行购买上限或 B2B 资格校验。Spree 的业务逻辑由 app/services 下的 Service 与 app/workflows 下的 Spree::Workflow 两类 Ruby 类承载,调用后返回 Spree::ServiceModule::Result,用 result.success?、result.value、result.error 判断结果。

主要能力:钩子分三类。validate 在写入前运行,用 workflow.errors.add 加错误并调用 workflow.reject! 否决流程,API 返回 422 validation_error;context 钩子(如 set_promotion_context、set_tax_line_context、get_provider_data、extend_payload)返回 Hash 并深合并后交给计算;lifecycle 钩子(after_item_added、before_finalize、after_cancel 等)在操作前后运行,部分位于事务内。常用挂载点包括 carts.add_item.validate、carts.complete.validate、payments.capture.validate、returns.create.validate、products.activate.validate 等。

使用方式:在 config/initializers/spree.rb 中用 Spree.hooks.register('carts.add_item.validate', 'MyStore::CheckPurchaseLimit') 注册,键为 '<workflow key>.<hook>',处理器是带 #call(workflow) 的类,可读取 workflow.cart、workflow.variant 等读者。可用 Spree.hooks.unregister 移除处理器。运行时可在控制台查看 Spree.hooks.workflows、Spree.hooks.carts、Spree.hooks.validate!。自定义多步骤流程可继承 Spree::Workflow,使用 step、external_step、run_hooks、failure、halt! 等。

适用场景:购买限制、B2B 资格、欺诈拦截、退货政策、税务豁免、承运商数据、注册审核、GDPR 拒绝等。

限制:不要在模型上写业务行为或覆盖 finalize!、Order#cancel、Payment#capture! 等方法;不要依赖处理器顺序;处理器异常会传播并回滚事务;validate 之外不要 reject!;事务内 lifecycle 钩子不要做慢速网络调用;网络调用应使用 external_step 或事件订阅者。资料未提供具体收费、价格与平台信息。