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
Другие вопросы по тегам