Pregunta

me encontré con un gran problema en el movimiento de mi solicitud de rieles 3. Tengo un ayudante de vista que yo llamo 'WidgetHelper'. Esto ayuda a hacer que algunas parciales de forma automática cuando me refiero a ella. Por ejemplo

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

Pero no funciona correctamente. Se hace el código HTML como yo quiero, pero se escapa el valor de retorno, lo que no se espera. ¿Cómo puedo saber a render (o algo así) a no escapar el valor de retorno para mí?

Aquí está mi código:

  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
¿Fue útil?

Solución

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

El método raw de Rails 3 hace lo contrario del método h en Rails 2. Escapar una cadena se realizó con el método h en los carriles 2. En Rails 3, salida de cuerdas de una visión se escapó por defecto, y la lata de escapar ser desactivado por el método raw.

Otros consejos

Carriles 3 cambió la forma en que el contenido de filtrado de obras -. Por defecto supone que desea todo lo filtra

Se puede corregir esto usando html_safe:

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

Ver: http://asciicasts.com/episodes/204 -Xss-protección-in-carriles-3

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top