cadena método Alias en rubí hace llamar
-
25-09-2019 - |
Pregunta
estoy reescribiendo el controlador método render, sin embargo, quiero usar el método de edad cuando en el método render_to_string. Estos son mis códigos actuales:
def render_with_xhr(options = {}, extra_options = {}, xhr_check = true, &block)
if xhr_check && request.xhr?
template = render_to_string(options)
render_without_xhr(:update) {|page| page.replace_html("#popup .dialog", template)}
else
render_without_xhr(options, extra_options, &block)
end
end
alias_method_chain :render, :xhr
Lo que pasa es que, dado que las marcas render_to_string uso de render (presumiblemente), termino en un bucle infinito. ¿Cómo puedo hacer que caiga de nuevo al viejo método sólo para esa línea de mi nuevo método render?
Me ajustado los códigos de la respuesta aceptada, código final es el siguiente:
def render_to_string(options = {}, &block)
render(options, {}, false, &block)
ensure
response.content_type = nil
erase_render_results
reset_variables_added_to_assigns
end
def render_with_xhr(options = nil, extra_options = {}, xhr_check = true, &block)
if xhr_check && request.xhr?
template = render_to_string(options)
render_without_xhr :update do |page|
page.replace_html("#popup .dialog", template)
end
else
render_without_xhr(options, extra_options, &block)
end
end
alias_method_chain :render, :xhr
Solución
que podría pasar en la línea 2 un valor único para las opciones de hash y, a continuación, detectarlo en el código y remove
def render_with_xhr(options = {}, extra_options = {}, xhr_check = true, &block)
if xhr_check && request.xhr? && !options.delete(:bacon)
template = render_to_string(options.merge(:bacon => true))
render_without_xhr(:update) {|page| page.replace_html("#popup .dialog", template)}
else
render_without_xhr(options, extra_options, &block)
end
end
alias_method_chain :render, :xhr
así:)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow