2011-07-01 9 views
42

Estoy usando Ruby on Rails 3.0.7 y estoy planeando usar plantillas parciales. Todas las clases de mi aplicación usarían los mismos parciales, así que tengo que decidir dónde localizarlos.¿En qué carpeta debo poner plantillas parciales compartidas "globales"?

¿Es una buena idea colocar plantillas parciales compartidas "globales" en la carpeta lib? Si no, ¿cuál es una práctica común para elegir la carpeta donde colocarlos? ¿Algún consejo sobre cómo nombrar y cargar correctamente esa carpeta?

Respuesta

53

El estándar es colocar todos los parciales compartidos en app/views/shared, y hacer referencia a ellos como

render :partial => 'shared/partial_name' 

Si usted tiene un estándar de "fila de una lista de" parcial (por ejemplo, para una página de índice), se puede utilizar una compartieron como parcial:

# To render a single object row: 
render :partial => 'shared/item', :locals => { :item => @item } 
# Or to render them all: 
render :partial => 'shared/item', :collection => @items 
+4

¿Sigue siendo preciso para Rieles 4? –

+0

@JamesMcMahon Sí, funciona con Rails 4. – jlhonora

+0

¿qué pasa con los rieles 5 ?, ¿hay una mejor manera en los rieles? 5 o usar el mismo –

4

convenios es ponerlos bajo app/views/shared

Si usted va a tener muchos parciales, me gustaría recomendar que poniéndolos en subdirectorios de esa carpeta, lo que tenga sentido para su aplicación, ya que tener muchos parciales en un directorio generalmente no es una buena práctica.

15

Carriles 4:

poner los parciales que tienen la intención de utilizar a través de tu aplicación en /app/views/application

Entonces cualquier lugar de su aplicación usted puede fácilmente:

render partial: 'partial_name', variable_name: variable 

El beneficio adicional es que siempre puede anular el parcial en un espacio de vista particular al redefinir lo que significa en parcial /app/views/controller_name/_partial_name.html.erb y las llamadas al parcial harán referencia el contexto más específico en el que se encuentra. Si eso no existe, obtiene el nivel de aplicación parcial.

sugerencia tomado de Thoughtbot

+0

Esto no funciona cuando se usan controladores con espacios de nombres. Luego espera que los archivos estén bajo 'app/views/NAMESPACE/application', sin la reserva de espacio sin nombre –

+0

En la segunda evaluación; este problema solo surge cuando ejecuto mis especificaciones, pero no cuando solo uso la aplicación ... –

Cuestiones relacionadas