SuperAPI AI 工具集

spree-customization

编程与开发

查看项目

更新于 10-16 01:48

技能介绍

用途:为 Spree 6 定制提供“代码该放哪”的决策路径,避免 fork。按表格自上而下选择:越靠上越是数据/配置,成本低且升级不受影响;越靠下越耦合内部实现。

主要能力与用法:

  • 商店设置(货币、市场、语言、配送、税率、支付、订单编号)走后台 Settings 或 Admin API,属数据无需部署。
  • 全局限制用 SPREE_* 环境变量(启动时类型校验),Spree.config 仍可用于 config/initializers/spree.rb。
  • 模型级设置用 preference;拦截操作用工作流 validate 钩子(Spree.hooks.register,handler 调 workflow.reject!);在核心流程内运行代码用生命周期/上下文钩子。
  • 事后反应用事件订阅者(Spree::Subscriber,如 order.placed);通知外部系统用 Webhook。
  • 结账前置要求用 Spree::Checkout::Registry.add_requirement / register_step。
  • 替换税务、配送、履约、搜索、定价、库存、支付等用 Provider 注册。
  • 自有 IdP 登录用认证策略;商户数据用自定义字段;集成数据用 metadata;可筛选属性用 Spree.ransack.add_attribute。
  • 新增模型/端点用 spree generate api_resource;新增状态用 Spree::HasStatus;改变核心流程用依赖替换(Spree::Dependencies.*_workflow)。
  • 装饰器为最后手段;后台界面用 dashboard 插件;跨应用共享用扩展 gem。

限制与反模式:不要用装饰器覆盖 finalize!、cancel 等生命周期方法,改用钩子;不要用 after_save/after_commit 做副作用,改用事件订阅者;不要 clear_validators!;additional_permitted_attributes 必须用 +=(默认冻结);不要写旧版 *_service 依赖键;不要直接设 payment_status/fulfillment_status;新状态字段不要用枚举或状态机;后台不要改 Rails 视图。命令在经典 Rails 应用用 bin/rails 并去掉 server/ 前缀。更多文档见 node_modules/@spree/docs/dist/developer/customization/quickstart.md 及 https://spreecommerce.org/docs/developer/customization/quickstart。