首页 > 解决方案 > 根据变量名动态调用方法

问题描述

我有一个应用程序可以根据用户选择的“速度”计算运费。我正在尝试根据这些速度重构这个 if 语句。这是当前的 if 语句:

  def walk_thru_each_rate_type(speed_hash, speed_from_db)
    if speed_hash.has_key?("flex")
      handle_flex_rates(speed_from_db)
    end
    if speed_hash.has_key?("fixed")
      handle_fixed_rates(speed_from_db)
    end
    if speed_hash.has_key?("free")
      handle_free_shipping(speed_from_db)
    end
  end

所以每种方法都只是基于“速度”。flex, fixed or free并且方法名称中包含这些速度。我在想这样的事情,但它不起作用:

handle_"#{speed}"_rates(speed_from_db)

如何根据速度名称动态调用我的方法?

标签: ruby-on-railsruby

解决方案


您可以调用 Object#send 传递方法名称和参数。在你的情况下,它会像:

self.send("handle_#{speed}_rates", speed_from_db)

看看https://apidock.com/ruby/Object/send


推荐阅读