2009-03-31 11 views
0

DBにローカル変数参照を含む文字列があり、Rubyで解析して置き換えます。 例えば、DB内の文字列は"Hello #{classname.name}"あり、それはclassname.descriptionレールをDB文字列から変数置換にする

に格納されており、私のコードは読む:

:ちょうどデシベルから正確な値を出力します

<%=h @classname.description %> 

入れ

としない(classname.nameがボブであると仮定):

Hello Bob 

DBから文字列を解析するにはどうすればよいですか?

+0

このフィールドには、システム(「rm -rf *」)などの任意のデータを入力できますか。良くない。 –

答えて

1

eval()を使用してこれを行うことができます。例:

>> a = {:name => 'bob'} 
=> {:name=>"bob"} 
>> eval('"Hello #{a[:name]}"') 
=> "Hello bob" 

しかし、あなたがしていることは、非常に危険なことがあり、ほとんど必要ではありません。私は、これがプロジェクトのためのものを行う正しい方法であるかどうかを確かめることはできませんが、一般的に、データベースで実行されるコードを格納することは悪い習慣です。

+0

いいですよね、代わりに文字列置換(.sub)を使うことにしました。 – Birdman

+0

恐ろしい!ずっといい :-) – Gdeglin

1

evalの問題を回避するために、Liquidのような安全なテンプレートエンジンを使用しないのはなぜですか?

template_string = "Hello {{name}}" #actually get from database 
template = Liquid::Template.parse(template_string) #compile template 

name = 'Bob' 
text = template.render('name' => name)  
関連する問題