2008-10-02 16 views
6

Siendo flojo (y me gusta el código DRY), soy el tipo de persona que va a escribir algunos envoltorios para el marcado HTML recurrente. Los proporcionados por Rails ya son buenos, pero a veces tengo algo un poco más específico que sé que voy a repetir una y otra vez.Con Rails, ¿dónde debería poner html snippets? No quiero parciales pero quiero que se vuelvan a cargar durante el desarrollo

En algunas situaciones, un parcial puede ser la solución, pero a veces solo voy a llamar el fragmento con demasiada frecuencia para justificar la sobrecarga de usar parciales.

Ahora mismo creo un archivo helpers/html_helper.rb y lo meto allí. El problema es que los ayudantes no se vuelven a cargar dinámicamente por solicitud durante el desarrollo. Así que cada vez que modifico mi fragmento o el código que lo rodea, tengo que matar el servidor y reiniciarlo.

De acuerdo, es solo un proceso de 5 segundos, pero me encanta la conveniencia de Rails de simplemente desarrollar y luego actualizar el navegador. Así que me encantaría tener eso para mis fragmentos de marcas también.

Nota: Solo insertando 'unloadable' dentro del módulo auxiliar no funciona.

Respuesta

0

No es una solución real, pero podría utilizar pruebas (TestUnit, RSpec o lo que sea) para asegurarse de que sus ayudantes funcionen como se esperaba. De esta forma, no confiaría tanto en la recarga automática de sus ayudantes.

1

¡Buena pregunta! Esta es una técnica que debería abusar con más frecuencia.

#I go in environment.db (presumably it will work in one of the per-environment files, too.) 
    Dependencies.explicitly_unloadable_constants << 'NameOfHelperToReloadHere' 

Esa matriz comienza vacía, por cierto, al menos en mi instalación. (Comprobado a través de la consola.)

He probado esto localmente y funciona para mí, al menos en Rails 2.0.2. El crédito principal para la solución pertenece a this gentleman.

+0

¡Funciona! Gracias por el consejo :-) Tenga en cuenta que en 2.1.1, el uso de Dependencias directamente está en desuso y debe ser reemplazado por ActiveSupport :: Dependencias – webmat

+0

Hmmm, hablé demasiado rápido. Por alguna razón, no parece funcionar con ayudantes. Seguiré cavando – webmat

+0

Ese artículo termina con el comentario más extraño de todos los tiempos :-) ¡Compruébalo! – webmat

1

Si las inserta en application_helper.rb, se cargarán todas las veces y estarán disponibles para todas sus vistas. Esto se carga cada vez en modo de desarrollo (o al menos no he encontrado ningún problema).

Normalmente crearé pequeños ayudantes que utilizo en todo el sitio (cabeceras de tablas ordenables, por ejemplo) que usan la misma lógica.

+0

Esta debería ser la solución correcta.Los ayudantes deben volver a cargarse automáticamente sin ningún código adicional, a menos que los requiera de forma manual (lo que nunca debería hacer). –

1

Esto debe recargar todos los ayudantes en cada petición (suponiendo que haya pegado a las convenciones de nombres por defecto)

#Put this in config/environments/development.rb 
ActiveSupport::Dependencies.explicitly_unloadable_constants.concat(Dir.glob("#{RAILS_ROOT}/app/helpers/**/*.rb").map {|file| File.basename(file, '.rb').camelize}) 

O si está utilizando una versión anterior de rieles (2.0.2 o anterior creo)

#Put this in config/environments/development.rb 
Dependencies.explicitly_unloadable_constants.concat(Dir.glob("#{RAILS_ROOT}/app/helpers/**/*.rb").map {|file| File.basename(file, '.rb').camelize}) 

funciona para mí en RoR 2.1.1


Actualización: fragmento superior modificado para incluir 'ActiveSupport ::', debe haberse copiado/pegado incorrectamente desde mi código.

+0

Intenté exactamente eso. Todavía no recoge las nuevas modificaciones realizadas en un helper entre las actualizaciones. Por cierto, ambos fragmentos dicen exactamente lo mismo ;-) – webmat

Cuestiones relacionadas