如何使用转义值动态构建构建器

Nic*_*ilt 1 ruby ruby-on-rails builder

现在我知道如何在不转义值的情况下构建xml.如何告诉Builder不要逃避值

但是我需要动态构建标签.

期望的结果

<bank_info>Chase</bank_info>
Run Code Online (Sandbox Code Playgroud)

我拥有的是什么

attr = 'bank_info'
builder = Builder::XmlMarkup.new
builder.attr { |x| x << 'bank_info' } # does not work
Run Code Online (Sandbox Code Playgroud)

我可以尝试把整个事情做成一个巨大的字符串并评估它.但评估并不安全.我错过了更好的选择吗?

Mar*_*une 5

通常,调用具有名称的方法的最简单方法是使用send__send__.这里:

builder = Builder::XmlMarkup.new
builder.__send__("bank_info") do  # same effect as:  builder.bank_info do
  builder << "Chase"
end
Run Code Online (Sandbox Code Playgroud)

顺便说一下,有一个变种public_send,如果你想确保你没有调用私人方法.它只在Ruby 1.9中,您可以require "backports"在Ruby 1.8中使用它.

注意:在这种情况下,send如@KandadaBoggu所指出的那样不起作用,因为Builder会覆盖它; 你必须使用__send__.