6

Ok, así que tengo un método de ayuda en el controlador de aplicación:Render parcial de helper_method

def run_test(test_name) 
    #computation stuff 
    render :partial => test_name 
end 

Y la llamo al igual que en las vistas:

<%= run_test("testpartial") %> 

y rinde bien con sólo 1 (aunque ... el render parcial parece devolver una matriz en lugar de solo el contenido parcial?), pero si pongo la llamada auxiliar run_test en la vista dos veces aparece un error de renderización doble, lo que no debería ocurrir con los parciales.

¿Alguna idea?

+0

qué versiones de Ruby y Rails está usando, no lo creo obtener este comportamiento cuando se ejecuta 3.1? –

+0

3.1. Estaba usando un candidato RC, pero actualicé solo para estar seguro y todavía no está funcionando. – Msencenb

+0

Hmmm ... Así que resultó que estaba definiendo este método de ayuda en el application_controller usando helper_method: run_test, pero funciona moverlo al archivo application_helper en la carpeta de ayuda. Entonces ... Tengo un entendimiento completo entre la diferencia de un helper definido en el controlador de la aplicación y un helper definido en un archivo helper. ¿Alguien puede llenarme? – Msencenb

Respuesta

6

render en un controlador frente a render en una vista son métodos diferentes. El controlador eventualmente llama al render en una vista, pero el método del controlador render en sí mismo espera ser llamado solo una vez. Se ve así:

# Check for double render errors and set the content_type after rendering. 
def render(*args) #:nodoc: 
    raise ::AbstractController::DoubleRenderError if response_body 
    super 
    self.content_type ||= Mime[formats.first].to_s 
    response_body 
end 

¿Nota cómo aumenta si se llama más de una vez?

Cuando se llama a helper_method le da la vista de un proxy a la versión del controlador de render, que no está destinado a ser utilizado en la misma forma que ActionView 's, que es, a diferencia del controlador de, que se espera ser llamado repetido para rendir parciales y otras cosas.

-2

Usted podría tratar de usar render_to_string método en el ayudante de vista

render_to_string :partial => test_name, :layout => false 
+4

render_to_string no está disponible para ver ayudantes. –

5

Parece que en Rails 3.2 esto sólo funciona:

# application_helper.rb 
def render_my_partial 
    render "my_partial" 
end 
+1

Esto también funciona en Rails 3.0. Esta parece ser la mejor respuesta para mí. – sockmonk

+1

Tuve que usar el render "my_partial.html.erb" en un parcial llamado "_my_partial.html.erb" pero funcionó. –

+0

La pregunta es específicamente cómo representar un parcial en un método en el controlador expuesto por el 'helper_method' del controlador. Esto no aborda la pregunta. – numbers1311407

Cuestiones relacionadas