ruby-on-rails - 传递一个字符串作为方法参数,稍后进行插值

标签 ruby-on-rails ruby

是否可以将字符串传递给 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/

相关文章:

Ruby 拒绝承认我已经安装了 Rubygems……为什么?

ruby-on-rails - 遍历对象数组并返回属性

ruby-on-rails - 什么是套接字劫持?

ruby-on-rails - 将数据导入我的新 Rails 应用程序的最佳方式?

ruby - 从散列中删除空值

ruby - 我需要帮助来理解 : Write a method, sum,它接受一个数字数组并返回数字的总和

ruby - 从 ruby​​ 中的输入设备读取

ruby-on-rails - Rails file_field 不上传任何东西

mysql - Rails 认为我的连接表有不同的列名

ruby-on-rails - 从一个模型实例引用模型