2009-03-31 1 views
0

Ich habe eine Zeichenfolge in einer Datenbank, die eine lokale Variablenreferenz enthält und ich möchte Ruby zu analysieren und zu ersetzen. Zum Beispiel ist der String in den db "Hello #{classname.name}" und es in classname.descriptionRails machen Variable Ersetzung von einem Db-String

und mein Code liest gespeichert ist:

<%=h @classname.description %> 

Put, die nur die aus dem db genauen Wert druckt:

und nicht die (unter der Annahme classname.name ist Bob):

Hello Bob 

Wie bekomme ich Ruby, um die Zeichenfolge von der db zu analysieren?

+0

Können Personen irgendwelche Daten in dieses Feld eingeben, z. B. System ("rm -rf *")? nicht gut. –

Antwort

1

Sie können dazu eval() verwenden. Zum Beispiel:

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

Was Sie jedoch tun, kann sehr gefährlich sein und ist fast nie notwendig. Ich kann nicht sicher sein, dass dies der richtige Weg ist, um Dinge für Ihr Projekt zu tun, aber generell ist das Speichern von Code in Ihrer Datenbank eine schlechte Übung.

+0

Guter Anruf, ich entschied mich, stattdessen einen String zu verwenden ersetzen (.sub). – Birdman

+0

Super! Viel besser :-) – Gdeglin

1

Warum verwenden Sie keine sichere Vorlagen-Engine wie Liquid, um das Eval-Problem zu umgehen?

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

name = 'Bob' 
text = template.render('name' => name)