2011-12-27 2 views
1

В моем приложении ruby ​​on rails я должен использовать рекурсию для рендеринга вложенных комментариев.Использование помощников в представлении выходит из html?

Из-за этого я решил разгрузить рендеринг в функцию в помощнике.

Основная структура функции такова:

def display_comments(tree) 
    to_render = "" 
    to_render << render({:partial => 'comment', :locals => {:body => tree[:body]}}) 
    tree[:children].each do |child| 
     to_render << display_comment(child) 
    end 
    return to_render 
end 

и в представлении я называю это так:

<% if comment_forest.length > 0 %> 
    <% comment_forest.each do |tree| %> 
     <%= display_comments(tree) 
    <% end %> 
<% end %> 

Однако, на веб-странице, рельсы ускользает все HTML и он заканчивает тем, как это:

enter image description here

ответ

3

Вы, вероятно, захотите позвонить html_safe, прежде чем вернуться. Поведение в области санитарии немного изменилось в Rails 3 (по умолчанию была включена защита XSS), поэтому вы также можете проверить номер this SO discussion of raw, h, and html_safe, который ссылается на explanation of SafeBuffers in Rails 3 Yehuda Katz.

+0

Прохладный, это сработало! Удивительно, но рельсы все еще избежали html из введенной пользователем информации. Что это за магия? : O –

+0

Фактически ретроспективно, пользовательские данные, вероятно, сбрасываются, когда они сохраняются не тогда, когда они отображаются. Верный? –

+1

Согласно Кацу, если вы соедините безопасную строку с небезопасной, сначала будет избегана небезопасная строка, что, вероятно, происходит здесь. – sczizzo

Смежные вопросы