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
相关产品推荐
相关产品推荐

