Rails 3 - Как избежать флеш-сообщения
Должно ли Flash-сообщение автоматически экранироваться Rails? Если нет, как гарантировать, что сообщение будет экранировано (без использования CGI::escapeHTML
)?
После некоторого поиска я понял, что его нужно экранировать, и один получил html_safe сообщение для отображения html. Но когда я пытаюсь
flash[:error] = "<b>YO</b>"
он отображается жирным шрифтом YO, а не как <b>YO</b>
, Обратите внимание, что строковый объект не является самим html_safe.
3 ответа
the questions stated without using CGI::escapeHTML
, Вы можете использовать ERB::Util.html_escape
в контроллере
flash[:error] = escape_html('<b>Yo</b>')
....
private
def escape_html(string_to_escape)
ERB::Util.html_escape(string_to_escape)
end
Правильный способ справиться с этим заключается в том, чтобы вы в последний раз отображали свое флеш-сообщение, которое, скорее всего, будет application.html.erb
, менять
<%= message %>
в
<% flash.each do |message_type, message| %>
<div class="alert alert-<%= message_type %>"><%= message %></div>
<% end %>
в
<%= sanitize message %>
помните всегда применять sanitize
к строке в конечной точке конвейера ваша строка проходит, чтобы убедиться, что вы получите свой стиль.
Вы должны использовать html_safe
в вашем контроллере для флэш-сообщения, которое вы хотите экранировать. Это убирает необработанную функцию из вида.
flash[:error] = "<b>YO</b>".html_safe