是否可以将字符串传递给 ruby 中的方法并让该方法插入该字符串?
我有这样的想法:
do_a_search("location = #{location}")
...
def do_a_search(search_string)
location = .... #get this from another source
Model.where(search_string)
end
上下文是 RoR,但我认为这是一个一般的 ruby 问题。我意识到上面的例子看起来有点复杂,但我正在尝试重构一堆非常重复的方法。
问题是,如果我将要插值的字符串放在双引号中,调用方法时位置不存在,如果我将它放在单引号中,它永远不会被插值...
我真正想做的是把它放在单引号里,然后再插值。我认为这是不可能的,还是我遗漏了什么?
编辑: 要清楚(因为我认为我已经过分简化了我在上面尝试做的事情),这里的问题之一是我可能想在多个上下文中调用此方法;我可能真的想调用
do_a_search("country = #{country}")
甚至
do_a_search("country = #{country} AND location = #{location})
(国家/地区也作为本地变量存在于我的方法中)。因此,我想在我的方法调用中传递替换所需的一切
我认为 facets gem 中的 String.interpolate 方法可以解决我的问题,但它在 rails 4 中不起作用
最佳答案
为此,使用了 %
。首先,创建一个字符串:
s = "location = %{location}"
稍后,您可以对其应用 %
:
s % {location: "foo"} # => "location = foo"
如果你不必命名参数,那么它更简单:
s = "location = %s"
s % "foo" # => "location = foo"
关于ruby-on-rails - 传递一个字符串作为方法参数,稍后进行插值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23371451/