You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改Ruby代码实现邮编前缀匹配以隐藏周日配送费率

问题解决方案

你的代码替换include?为start_with?后没生效,核心原因是PostCodeIdentifier类里的触发条件类型不匹配:初始化时把符号类型的trigger_when转成了小写字符串,但match?方法的case判断用的是符号,导致永远走else分支返回false,根本没执行到前缀判断的逻辑。

修改后的完整代码

# ============ PostCodeIdentifier ======================== 
class PostCodeIdentifier
  def initialize(code_trigger)
    @codes = code_trigger[:codes].map(&:downcase)
    # 去掉符号转字符串的操作,保持原符号类型
    @trigger_when = code_trigger[:trigger_when]
  end
  def match?(post_code)
    case @trigger_when
    when :matches
      # 替换include?为start_with?,实现前缀匹配逻辑
      return true if @codes.any? {|code| post_code.downcase.start_with?(code)}
    when :does_not_match
      return true unless @codes.any? {|code| post_code.downcase.start_with?(code)}
    else 
      return false
    end
  end
end
# ============ PostCodeHideRateCampaign =================
class PostCodeHideRateCampaign
  def initialize(post_code_triggers)
    @post_code_triggers = post_code_triggers
  end
  def run(cart, shipping_rates)
    return unless cart.shipping_address.zip
    @post_code_triggers.each do |post_code_trigger|
      post_code_identifier = PostCodeIdentifier.new(post_code_trigger)
      if post_code_identifier.match?(cart.shipping_address.zip)
        shipping_rates.delete_if do |rate|
          rate.name.downcase.include?(post_code_trigger[:rate_to_hide_trigger].downcase)
        end
      end
    end
  end
end

# ========================================== DO NOT SHOW ==========================================
POST_CODE_TRIGGERS_1 = [
  {codes: [
     'AB33' , 'AB34' , 'AB35' , 'AB36' , 'AB37' , 'AB38' , 'AB39' , 'AB40' , 'AB41' , 'AB42' , 'AB43' , 'AB44' , 'AB45' , 'AB46' , 'AB47' , 'AB48' , 'AB49'
   ],
  rate_to_hide_trigger: 'SUNDAY',
  trigger_when: :matches },
]


CAMPAIGNS = [
  PostCodeHideRateCampaign.new(
    POST_CODE_TRIGGERS_1
  )
]

CAMPAIGNS.each do |campaign|
 campaign.run(Input.cart, Input.shipping_rates)
end

# ========================================== END POSTCODE RESTRICTIONS ==========================================

关键修改点说明

  1. 修复条件匹配逻辑:
    原代码中@trigger_when = code_trigger[:trigger_when].downcase会把传入的符号(比如:matches)转成字符串"matches",但case when判断的是符号:matches,导致分支完全不匹配,直接返回false。现在去掉.downcase操作,保持符号类型,让条件判断正常触发。

  2. 替换前缀判断方法:
    把post_code.downcase.include?(code)改成post_code.downcase.start_with?(code),实现"邮编以指定值开头"的判断逻辑,替代原来的"邮编包含指定值"。

  3. 保留大小写兼容处理:
    依然对邮编和触发码做了.downcase转换,确保无论用户输入的邮编是大写还是小写,都能正确匹配列表中的前缀。

内容的提问来源于stack exchange,提问作者AltoExyl

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 15:41:16