¿Cómo mono Patch en Ruby on Rails?
-
26-09-2019 - |
Pregunta
Usemos un ejemplo del mundo real.
Quiero monkey Patch Willpaginate :: Linkrenderer.to_html Método.
Hasta ahora he intentado:
- Creó un archivo en la carpeta: lib/monkeys/will_paginate_nohtml.rb
- Agregado en config/entornos.rb: requiere 'monkeys/will_paginate_nohtml' al final del archivo
- Dentro de ese archivo, este era mi código:
mi
module Monkeys::WillPaginateNohtml
def to_html
debugger
super
end
end
WillPaginate::LinkRenderer.send(:include, Monkeys::WillPaginateNohtml)
Pero de alguna manera, el depurador no se pasa. Parece que el parche falló.
¡Cualquier ayuda será apreciada, gracias!
Solución
¿Y qué pasa con este :-) Soluciones de @shingana, @kandadaboggu no funcionará ya que no hay "super" aquí. Quieres llamar original versión no la súper versión.
module WillPaginate
class LinkRenderer
alias_method :to_html_original, :to_html
def to_html
debugger
to_html_original
end
end
end
Otros consejos
El título de su pregunta es engañoso. Francamente, creo que probablemente solo desee personalizar la estructura de la lista de páginas Will_Paginate, que se puede hacer de manera diferente.
Entonces, en su caso, la forma correcta es extender el renderizador. Por ejemplo, cargue lo siguiente de un inicializador (a través de config/inicializadores):
class CustomPaginationRenderer < WillPaginate::LinkRenderer
def to_html
# Your custom code, debugger etc
end
end
Luego, para que su aplicación use este renderizador, agregue lo siguiente a su archivo config/entorno.rb:
WillPaginate::ViewHelpers.pagination_options[:renderer] = 'CustomPaginationRenderer'
Creo que necesitas abrir el método
module WillPaginate
class LinkRenderer
def to_html
debugger
super
end
end
end
Prueba esto:
class WillPaginate::LinkRenderer
def to_html
debugger
super
end
end