我有一个Shopify Plus帐户,我试图在我的装运脚本中添加一个新条件,控制向客户显示哪些送货方式。具体来说,我想给客户一个特定的标签访问免费送货。控制
def freeItUp
index = -1
if Input.cart.customer != nil and Input.cart.customer.tags != nil
Input.cart.customer.tags.index do |tag|
return tag.upcase == "ALWAYSFREE"
end
end
return index > -1
end
shippingMethodToDelete = (condition1 or condition2 or freeItUp) ? "UPS" : "FREE"
Output.shipping_rates = Input.shipping_rates.delete_if do |shipping_rate|
puts shipping_rate.name
shipping_rate.name.upcase.start_with?(shippingMethodToDelete)
end
但是,我一直收到以下错误
枚举器(您的购物车)所需的光纤
枚举器所需的光纤(空车)
我对Ruby并不十分熟悉,但我在Line Item脚本中使用相同的代码块(上面)没有任何问题。根据{{3}}我相信我不是想要访问不存在的属性。任何想法/帮助将不胜感激。
答案 0 :(得分:1)
你可以尝试:
def always_free_tag?
return false if Input.cart.customer.nil? || Input.cart.customer.tags.empty?
Input.cart.customer.tags.any? do |tag|
tag.upcase == "ALWAYSFREE"
end
end
shippingMethodToDelete = (condition1 or condition2 or always_free_tag?) ? "UPS" : "FREE"
Output.shipping_rates = Input.shipping_rates.delete_if do |shipping_rate|
puts shipping_rate.name
shipping_rate.name.upcase.start_with?(shippingMethodToDelete)
end
此外,您可以分享更多的堆栈跟踪及其指向的行吗?
编辑:好极了!很高兴有效。我认为您的问题是您正在使用Array#index
来生成块的索引(整数)(此行:Input.cart.customer.tags.index
)。然后,您在Numeric上调用#upcase
,这不是一种方法。如果您改为这样做,它将按预期工作:
Input.cart.customer.tags.index do |i|
return true if Input.cart.customer.tags[i].upcase == "ALWAYSFREE"
end
另一个问题是,在ruby中,只有nil
和false
在ruby中是假的,所以shippingMethodToDelete
中的条件可能没有返回正确的值。相反,我改变了它,所以它总是返回一个布尔值,我们可以确保{J}被正确搜索和评估ALWAYSFREE
。我认为你非常接近,但请看Enumerable#any以获取更多示例。