お望みならば
"Hi #{user.name}, ...."
データベースで、一重引用符を使用するか#
、バックスラッシュでエスケープして、Rubyが#{}
すぐに補間しないようにします。
s = 'Hi #{user.name}, ....'
s = "Hi \#{user.name}, ...."
次に、後で補間を実行するときに、大胆であるか信頼している場合は、次を使用できますeval
。
s = pull_the_string_from_the_database
msg = eval '"' + s + '"'
s
を機能させるには、二重引用符で囲まれた文字列に変換する必要があることに注意してくださいeval
。これは機能しますが、これは最も優れたアプローチではなく、あらゆる種類の奇妙で紛らわしいエラーが発生する可能性があります。あなた(または他の信頼できる人)が文字列を書いている限り、それは大丈夫なはずです。
単純なマイクロテンプレートシステムを使用したほうがよいと思います。これは、次のような単純なものでもかまいません。
def fill_in(template, data)
template.gsub(/\{\{(\w+)\}\}/) { data[$1.to_sym] }
end
#...
fill_in('Hi {{user_name}}, ....', :user_name => 'Pancakes')
もちろん、好きな区切り文字を使用できます{{...}}
。最近、Mustache.jsとHandlebars.jsを使用しているので、一緒に使用しました。この単純な実装には問題があります(テンプレート内のフォーマットオプション、区切り文字のエスケープなどはありません)が、それで十分かもしれません。テンプレートがより複雑になった場合は、おそらくString#%
またERB
はうまくいく可能性があります。