在客户标签上购买送货脚本折扣

时间:2018-01-16 17:32:51

标签: ruby shopify

我有一个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}}我相信我不是想要访问不存在的属性。任何想法/帮助将不胜感激。

1 个答案:

答案 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中,只有nilfalse在ruby中是假的,所以shippingMethodToDelete中的条件可能没有返回正确的值。相反,我改变了它,所以它总是返回一个布尔值,我们可以确保{J}被正确搜索和评估ALWAYSFREE。我认为你非常接近,但请看Enumerable#any以获取更多示例。