Визуализация переменной с помощью erb - PullRequest
3 голосов
/ 07 мая 2010

У меня следующая проблема: у меня есть rhtml (html, измельченный вместе с ruby ​​внутри тегов <%%> и <% =%>), хранящийся в базе данных, которую я хочу отобразить Информация получена через запрос. Мне нужно уметь оценивать информацию, которую я получаю из базы данных, как будто это был обычный контент внутри .erb-файла. Что у меня сейчас есть:

<% @mymods.each do |mod| %>
<%=  render_text(mod["html"])%>
<% end %>

Где mod ["html"] - это переменная, содержащая код rhtml, а @mymods - массив объектов из запроса. В настоящее время я понятия не имею, какую функцию мне следует использовать (render_text, конечно, не работает).

Помощь очень ценится.

/ TZer0

1 Ответ

11 голосов
/ 07 мая 2010

Вы можете использовать объект ERB для визуализации текста без текста в файле.
Просто передайте текст с тегами <%= %>. Вы можете поместить что-то вроде следующего в качестве функции application_helper.

def render_erb_text(text, args={})
   b = binding
   template = ERB.new(text, 0, "%<>")
   template.result(b)
end

А потом в вашем шаблоне

<%=  render_erb_text("<%= %w(hi how are you).join(' - ') %>")%>

Вы также можете рассмотреть рендеринг текста в вашем контроллере, поскольку вы можете лучше обрабатывать любые ошибки рендеринга, чем во время оценки представления.

Ознакомьтесь с документацией ERB для получения дополнительной информации о привязке переменных и т. Д.

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

...