Carriles 3 widget de ayudante parcial
-
03-10-2019 - |
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
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