在Spree后端创建配送方法报错求助:Calculator不能为空
解决Spree后端创建配送方式时"Calculator can't be blank"的问题
嘿,作为Spree新手遇到这个问题真的太常见啦!别担心,这是因为Spree的配送方式(ShippingMethod)必须关联一个计算器(Calculator)——前端创建的时候系统悄悄帮你处理了计算器的创建,但手动写代码时就得咱们自己来完成这一步~
具体解决步骤:
- 先创建对应的计算器实例
Spree提供了多种运费计算器类型,比如固定费率、按重量计费等,这里先以最常用的固定费率(FlatRate)为例:
# 创建一个固定运费为5美元的计算器(金额可以根据你的需求修改) calculator = Spree::Calculator::Shipping::FlatRate.create!(preferred_amount: 5.00)
如果需要按重量计费,代码可以这样写:
# 创建按重量计费的计算器,默认运费3美元,重量单位为千克 calculator = Spree::Calculator::Shipping::WeightBased.create!( preferred_default_amount: 3.00, preferred_weight_unit: 'kg' )
- 用创建好的计算器来生成配送方式
现在就可以带着计算器参数创建配送方式了,这样就不会再出现"Calculator can't be blank"的错误:
shipping_method = Spree::ShippingMethod.create!( name: "Name 1", zone_id: 1, calculator: calculator )
如果你想查看是否创建成功,可以用shipping_method.errors.full_messages来检查,用create!的话如果有错误会直接抛出异常,方便调试。
补充说明:
前端创建配送方式时,表单里会让你选择计算器类型并填写对应的配置项(比如固定运费金额),提交表单时后台会自动创建对应的计算器并关联到新的配送方式,所以你没察觉到这个步骤。但手动写代码时,就必须显式完成计算器的创建和关联哦~
内容的提问来源于stack exchange,提问作者Shilpi Agrawal
相关产品推荐
相关产品推荐

