客户标签上的 Shopify 运输脚本折扣
Shopify Shipping Script Discount on Customer Tag
我有一个 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
但是,我不断收到以下错误
fiber required for enumerator (Your Cart)
fiber required for enumerator (Empty Cart)
我不是很熟悉 Ruby,但我在行项目脚本中使用了相同的代码块(上面),没有任何问题。根据 documentation,我相信我不会尝试访问不存在的属性。任何 thoughts/help 将不胜感激。
你能试试吗:
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
中的情况可能不是返回正确的值。相反,我改变了它,所以它总是 returns 一个布尔值,这样我们就可以确保 ALWAYSFREE
被正确搜索和评估。我认为您真的很接近,但请查看 Enumerable#any 以获取更多示例。
我有一个 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
但是,我不断收到以下错误
fiber required for enumerator (Your Cart)
fiber required for enumerator (Empty Cart)
我不是很熟悉 Ruby,但我在行项目脚本中使用了相同的代码块(上面),没有任何问题。根据 documentation,我相信我不会尝试访问不存在的属性。任何 thoughts/help 将不胜感激。
你能试试吗:
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
中的情况可能不是返回正确的值。相反,我改变了它,所以它总是 returns 一个布尔值,这样我们就可以确保 ALWAYSFREE
被正确搜索和评估。我认为您真的很接近,但请查看 Enumerable#any 以获取更多示例。