You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Shopify脚本编辑器数组值显示问题:折扣码限制脚本优化

问题分析

当前脚本的核心问题是提前初始化了包含空数组的错误信息字符串,后续即使list_of_invalid_vendors数组添加了元素,vendor_message也不会同步更新,导致最终输出的数组还是空的[]。此外,错误信息的拼接逻辑时机不对,应该先完整收集所有无效商家,再统一生成错误提示。

修正方案

以下是修复后的代码,关键改动点已标注:

# 初始化空数组用于收集无效商家
list_of_invalid_vendors = []
contains_vendor = false
vendor_list = ["Evolution Racewerks", "Kies Giveaway Items", "Precision Raceworks"]

# 第一步:遍历购物车,收集所有无效商家
Input.cart.line_items.each do |line_item|
  vendor = line_item.variant.product.vendor
  if vendor_list.include?(vendor)
    list_of_invalid_vendors.append(vendor)
    contains_vendor = true # 标记购物车存在无效商家
  end
end

# 第二步:如果有无效商家且使用了折扣码,生成并输出正确的错误信息
if contains_vendor && Input.cart.discount_code.present?
  # 将数组转为逗号分隔的字符串,生成正确的提示文本
  vendor_message = "Invalid vendors in cart : #{list_of_invalid_vendors.uniq.join(', ')}"
  error_message = "Cannot use discount, #{vendor_message}"
  puts error_message
  # 实际Shopify脚本中需调用错误抛出方法,示例:
  # Input.cart.errors.add(:base, error_message)
end
关键改动说明
  • 延迟生成错误信息字符串:直到收集完所有无效商家后,才将数组通过join(', ')转为逗号分隔的字符串,避免提前绑定空数组的值。
  • 使用uniq去重:防止同一商家的多个商品重复出现在提示里。
  • 调整逻辑顺序:先完成所有无效商家的收集,再判断是否触发错误提示,逻辑更清晰。
  • 简化条件判断:用Input.cart.discount_code.present?替代!= nil,更符合Ruby/Shopify的编码习惯。

内容的提问来源于stack exchange,提问作者Ryan Meza

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 14:20:34