Ho un metodo di classe nel mio modello e ho bisogno di accedere a un metodo da uno dei miei assistenti di visualizzazione. Attualmente sto includendo include TalkHelper
, ma ottengo ancora un NoMethodError.Rails 3 Visualizza il metodo di supporto nel modello
risposta
È possibile posizionare l'helper nella cartella lib e includerli in qualsiasi modo. Ti piace questa: lib/some_helper.rb
module SomeHelper
def somedef
#your code there
end
end
Se è necessario l'helper in un metodo di classe avresti bisogno di extend
, non include
esso.
module TalkHelper
def woo; 'hoo' end
end
class MyClass
extend TalkHelper
def self.boo; woo end
end
MyClass.boo #=> 'hoo'
Basta essere attenti con aiutanti al di fuori del contesto di visualizzazione, come aiutanti possono dipendere controller
, o qualcosa d'altro dal contesto di una richiesta, che non saranno disponibili nel modello.
nel modello, si può fare qualcosa di simile al seguente:
ApplicationController.helpers.your_helper_method
O
YourController.helpers.your_helper_method
La migliore soluzione è quella di refactoring del codice in modo che non è necessario chiamare il codice helper vista dai modelli. Non è il modo RoR. Come altri sottolineano, puoi estrarre il codice helper nella cartella lib.
Vedere questo per ulteriori informazioni:
Alla fine ho seguito il tuo consiglio e ho rifraturato il mio codice in modo da non dover utilizzare il metodo helper nel modello. – LanguagesNamedAfterCofee
dovrebbe essere 'module' (minuscolo)? –
sicuro. fisso! (15 simboli) – railscard