2012-01-02 11 views
11

Desde mi entender, los ayudantes se utilizan principalmente para limpiar vistas desde alguna lógica específica de la vista.Uso de los ayudantes de Rails para representar parciales

Pero en mi nuevo proyecto actualmente (uso de la herencia), que ha tropezado con una gran cantidad de ayudantes que se ven así

def itemprepare 
    render :partial => 'items/itemlist_summary' 
end 

Es esto correcto? Prestar un parcial para mí parece algo que desearía hacer en la vista, ya que no incluye ninguna lógica que deba abstraerse.

¿Debo simplemente poner en línea todos estos ayudantes?

Respuesta

8

La representación de un parcial no pertenece a un ayudante. Los ayudantes deberían ayudarte a hacer cosas que contengan lógica. La lógica no pertenece al controlador a menos que sea lógico representar parciales y decidir si se debe mostrar algo o no.

0

Tenemos un par de ayudantes así en nuestro proyecto, pero la mayoría de ellos están en nuestra joya personalizada. Al envolver el renderizado parcial con el helper se evita que la aplicación sepa cómo se procesa la información y podemos ampliar fácilmente la lógica, cambiar parcial o hacer lo que queramos dentro de este helper siempre que represente la parte solicitada de la vista. A veces, estos parciales requieren algunos datos que residen dentro de la gema en sí y no hay necesidad de exponerlo a la aplicación. Entonces la aplicación llama al método auxiliar (a veces sin ningún parámetro) que forma los parámetros necesarios y locales y los pasa a parcial.

Pero cuando solo procesa de forma parcial dentro de su aplicación y no necesita una lógica extensa alrededor de esa representación, no creo que haya mucho uso desde la creación de un nuevo ayudante para cada parcial.

6

Aunque generalmente no debe usar métodos de ayuda para representar parciales, puedo ver cómo en algunas situaciones podría ser necesario. Por estas circunstancias, es necesario utilizar el método concat:

def itemprepare 
    concat(render(:partial => 'items/itemlist_summary')) 
end 
+0

Exactamente lo que estaba buscando :) –

1

Como dice Ajedi32, parciales uso corresponda a vistas pero a veces es útil para utilizarlos en ayudantes. Espero que sea útil para mostrar lo que he hecho en mi aplicación:

He estado siguiendo el excelente artículo Thinking of Rails Helper to help DRY our view. Estoy usando Jquery Mobile con un encabezado fijo, una barra de navegación, un panel de navegación y un pie de página.

En cada página necesito incluir el pie de página y el panel de navegación, por lo que normalmente habría sido:

<div data-role="footer"> 
    <h4>Page Footer</h4> 
    </div><!-- /footer --> 
    <%= render "shared/nav_panel" %> 
</div><!-- /page --> 

al final de cada página.

Entonces refactorizado el render parcial en la solicitud de ayuda y ahora es:

# app/helpers/application_helper.rb 
    def page_footer 
    footer = content_tag :div , :"data-role" => "footer" do 
     content_tag :h4, "Page Footer" 
    end 
    nav_panel = render(:partial => 'shared/nav_panel') 
    footer + nav_panel 
    end 

y en la vista acabo de llamar:

<%= page_footer %> 

Esto es sólo un ejemplo corto; en realidad, la aplicación tiene un pie de página que cambia según el estado de inicio de sesión, el idioma del usuario, etc.

Cuestiones relacionadas