Вопрос

Я столкнулся с большой проблемой в перемещении моего приложения к рельсам 3. У меня есть вид на просмотр, который я называю «Widegethelper». Это помогает автоматически рендерировать некоторые частицы, когда я ссылаюсь на него. Например

<%= widget('loginbox', :global => true) %>

Но это не работает правильно. Он отображает HTML-код, как я хочу, но ускользает от возвращаемого значения, что не ожидается. Как я могу сказать оказывать (или к чему-то) нет избежать возврата для меня?

Вот мой код:

  def widget(widget, options={})
    begin
      unless options[:fullpath]
        render :partial => widget_path(widget, options[:global])
      else
        render "widgets/#{widget}"
      end
    rescue ActionView::MissingTemplate
      "<!-- widget: #{widget.inspect}, #{options.inspect} -->"
    end
  end
Это было полезно?

Решение

def widget(widget, options={})
  begin
    unless options[:fullpath]
      raw render(:partial => widget_path(widget, options[:global]))
    else
      raw render("widgets/#{widget}"))
    end
  rescue ActionView::MissingTemplate
    raw "<!-- widget: #{widget.inspect}, #{options.inspect} -->"
  end
end

То raw Метод рельсов 3 делает обратное h Метод в рельсах 2. Удаление строки было сделано с h Способ на рельсах 2. На рельсах 3 строки, вывод с вида сбежается по умолчанию, а сбежав может быть отключен raw метод.

Другие советы

Rails 3 изменил способ фильтрации контента - это по умолчанию предполагает, что вы хотите, чтобы все фильтровали.

Вы можете исправить это, используя html_safe:

"<!-- widget: #{widget.inspect}, #{options.inspect} -->".html_safe

Видеть: http://asciicasts.com/episodes/204-xss-protection-in-rails-3.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top