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)
我可以尝试把整个事情做成一个巨大的字符串并评估它.但评估并不安全.我错过了更好的选择吗?
通常,调用具有名称的方法的最简单方法是使用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__.