Utilizzando link_to in una classe in un aiutante Rails
-
19-09-2019 - |
Domanda
Ho un aiutante rotaie utilizzando la structore sotto, ma quando lo uso ricevo il messaggio
undefined method 'link_to'
L'helper è organizzato come:
module MyHelper
class Facet
def render_for_search
link_to("Value", params)
end
end
class FacetList
attr_accessor :facets
def initialize
#Create facets
end
def render_for_search
result = ""
facets.each do |facet|
result << facet.render_for_search
end
result
end
end
end
Soluzione
Questo perché all'interno della classe Facet non si ha accesso al legame modello.
Al fine di chiamare il metodo render_for_search
probabilmente fare qualcosa di simile
<%= Facet.new.render_for_search %>
Basta sovrascrivere il metodo initialize
di prendere il contesto attuale come argomento.
Lo stesso vale per l'hash params.
class Facet
def initialize(context)
@context = context
end
def render_for_search
@context.link_to("Value", @context.params)
end
end
Quindi chiamare
<%= Facet.new(self).render_for_search %>
In caso contrario, definire il metodo render_for_search
direttamente all'interno del modulo MyHelper
e non avvolgerlo in una classe.
Altri suggerimenti
Prova ad usare questo:
self.class.helpers.link_to
A causa link_to non è definito nel dell'ambito corrente.
È possibile che questo funzionerà per un controller, ma credo che funzionerà all'interno di un altro aiutante pure. Se poi non provare:
include ActionView::Helpers::UrlHelper
Nella parte superiore del vostro aiutante.