Quiero utilizar los ayudantes familiares de los rieles, pero con una funcionalidad ligeramente alterada. La forma en que lo veo, quiero ser capaz de hacer algo como:Anula los auxiliares de rieles con acceso al original
module AwesomeHelper
#... create alias of stylesheet_link_tag to old_stylesheet_link_tag
def stylesheet_link_tag(*args)
if @be_awesome
awesome_stylesheet_link_tag *args
else
old_stylesheet_link_tag *args
end
end
end
la forma en que lo veo, tengo tres opciones:
- mono parches: volver a abrir el módulo de rieles ayudante . Si el equipo de rails cambia alguna vez el nombre de su módulo auxiliar, mi código se convierte en una fuente de fragilidad. No insuperable, pero no ideal.
- Use nombres de métodos diferentes: Tratar de mantener la interfaz de los carriles comunes puede ser mi perdición. Mis cambios pueden convertirse en una fuente de confusión para otros desarrolladores
- Métodos de separación (nuevos): No estoy seguro de si esto funcionaría, o si tendría los mismos inconvenientes que 1. Investigaré esto, pero esto podría ser una buena punto de partida.
Así que la pregunta aquí es, ¿estoy atrapado con una de estas soluciones subóptimas, o hay alguna otra forma que no he considerado? Si selecciono la opción 3, ¿hay alguna manera de hacerlo sin dirigirme directamente al módulo de carriles auxiliares?
(Nota:. He quitado el contexto, ya que no añade nada a la pregunta)
¿Sabes qué ... es tan loco obvio, estoy tratando de hacer estallar mis cerebros para averiguar por qué? ¡Pensé que no funcionaría! Voy a intentarlo esta noche y, si funciona, tendré palabras severas con mi cerebro, probablemente con una pared de ladrillos. Después, por supuesto, aceptando su respuesta ...: D – user208769
@ user208769 Hehehe. Eso es genial. Como mejor entiendo, los métodos generales de esta manera son generalmente preferibles en cualquier circunstancia. [Antepasados de la clase #] (http://ruby-doc.org/core-1.9.3/Module.html#method-i-ancestors) pueden ser realmente útiles para encontrar un buen lugar en la ruta de búsqueda de métodos para secuestrar el método despacho (o donde su módulo personalizado con la anulación necesita ser incluido para obtener el mejor efecto). – Cade
¿Qué? :) ¡Tienes que estar bromeando! Este es un GRAN gotcha! De la forma en que debe incluir a su ayudante en CADA clase que incluya AssetTagHelper. El tiempo vuela y tú u otra persona pueden olvidarse de necesitar que se incluya tu parche. Simplemente incluye AssetTagHelper y comienza a preguntarse: ¿por qué mi sitio ahora se ve de manera diferente? Es bueno cuando tú y el parche son la misma persona. Pero, ¿y si no? – jdoe