客户标签上的 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 中只有 nilfalse 在 ruby 中是假的,所以你在 shippingMethodToDelete 中的情况可能不是返回正确的值。相反,我改变了它,所以它总是 returns 一个布尔值,这样我们就可以确保 ALWAYSFREE 被正确搜索和评估。我认为您真的很接近,但请查看 Enumerable#any 以获取更多示例。