Заставить рельсы сделать переменную замену из строки БД - PullRequest
0 голосов
/ 31 марта 2009

У меня есть строка в БД, которая содержит ссылку на локальную переменную, и я хочу, чтобы Ruby проанализировал и заменил ее. Например, строка в БД имеет значение "Hello #{classname.name}" и хранится в classname.description

и мой код гласит:

<%=h @classname.description %>

Положите, что просто печатает точное значение из БД:

Hello #{name}

а не (предположим, classname.name это Боб):

Hello Bob

Как заставить Ruby разобрать строку из БД?

Ответы [ 2 ]

1 голос
/ 31 марта 2009

Почему бы вам не использовать безопасный шаблонный движок типа Liquid , чтобы обойти проблему eval?

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

name = 'Bob'
text = template.render( 'name' => name )       
1 голос
/ 31 марта 2009

Вы можете использовать eval() для этого. Например:

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

Однако то, что вы делаете, может быть очень опасным и почти никогда не требуется. Я не могу быть уверен, что это правильный путь для вашего проекта, но в целом хранение кода для выполнения в вашей базе данных - плохая практика.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...