Desidero utilizzare gli assistenti familiari dei binari, ma con funzionalità leggermente alterata. Il mio modo di vedere, voglio essere in grado di fare qualcosa di simile:Sostituisci gli helper dei binari con accesso all'originale
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
Il mio modo di vedere, ho tre opzioni:
- scimmia patching: riaprire il modulo di rotaie di supporto . Se il team delle rotaie cambia mai il nome del loro modulo helper, il mio codice diventa una fonte di fragilità. Non insormontabile, ma non ideale.
- Utilizzare nomi di metodi diversi: Provare a rimanere sull'interfaccia dei binari comuni può essere la mia rovina. Le mie modifiche potrebbero diventare fonte di confusione per altri sviluppatori
- Metodi di scollegamento (nuovo): Non sono sicuro se questo funzionerebbe o se avrebbe gli stessi svantaggi di 1. Effettuerà una ricerca, ma potrebbe essere una buona soluzione punto di partenza.
Quindi la domanda qui è, sono bloccato con una di queste soluzioni sub-ottimali, o c'è un altro modo che non ho considerato? Se vado per l'opzione 3, c'è un modo per farlo senza affrontare direttamente il modulo helper rails?
(Nota:. Ho rimosso il contesto, in quanto aggiunge nulla alla domanda)
Sai cosa ... è così folle e ovvio, sto provando a tormentarmi per capire perché Ho pensato che non avrebbe funzionato! Ci proverò stasera e, se funziona, avrò parole severe con il mio cervello, probabilmente coinvolgendo un muro di mattoni. Dopo, ovviamente, accettando la tua risposta ...: D – user208769
@ user208769 Hehehe. È fantastico. Nella migliore delle ipotesi, i metodi di override in questo modo sono generalmente preferibili in qualsiasi circostanza. [Class # ancestors] (http://ruby-doc.org/core-1.9.3/Module.html#method-i-estestori) può essere davvero utile per capire un buon posto nel metodo di ricerca del metodo per il metodo di hijack dispacciamento (o dove il modulo personalizzato con l'override deve essere incluso al meglio). – Cade
Cosa? :) Stai scherzando! Questo è un trucco ENORME! Il tuo modo di includere l'assistente in OGNI classe che include AssetTagHelper. Il tempo vola e tu o qualcun altro puoi dimenticarti della necessità di includere la tua patch. Devi solo includere AssetTagHelper e iniziare a chiedermi: perché il mio sito ora ha un aspetto diverso? È buono quando tu e il produttore di patch siete la stessa persona. Ma cosa succede se no? – jdoe