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

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
scroll top