2010-01-07 9 views
9

ich Schienen Helfer den structore unter Verwendung haben, aber wenn ich es benutze ich erhalte die MeldungMit link_to in einer Klasse in einer Rails-Helfer

undefined method 'link_to' 

Der Helfer wie angeordnet ist:

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 

Antwort

3

Dies liegt daran, dass Sie innerhalb der Klassenfacette keinen Zugriff auf die Vorlagenbindung haben. Um Sie wahrscheinlich die Methode aufrufen etwas tun, wie

<%= Facet.new.render_for_search %> 

einfach Ihre initialize Methode überschreiben, den aktuellen Kontext als Argument zu nehmen. Das Gleiche gilt für den Params-Hash.

class Facet 
    def initialize(context) 
    @context = context 
    end 
    def render_for_search 
    @context.link_to("Value", @context.params) 
    end 
end 

nennen Dann

<%= Facet.new(self).render_for_search %> 

Andernfalls bestimmen die Methode direkt innerhalb des MyHelper Modul und es nicht in eine Klasse wickeln.

+0

Das funktioniert, mit einer kleinen Änderung. In der Ansicht musste ich <% = MyHelper :: Facet.new (self) .render_for_search%> machen –

6

Versuchen Sie dies mit:

self.class.helpers.link_to 

Da link_to nicht in Ihrem aktuellen Bereich definiert ist.

Das obige funktioniert für einen Controller, aber ich vermute, es wird auch in einem anderen Helfer arbeiten. Wenn nicht, dann versuchen Sie:

include ActionView::Helpers::UrlHelper 

An der Spitze Ihres Helfers.

+0

Dies funktioniert nicht, da 'params' nicht innerhalb des Klassenbereichs definiert ist. –

+1

Sie können 'params' (oder einfach nur einen bestimmten Parameter über' params [: month] ') an Ihre Hilfsmethode übergeben, unabhängig davon, wo sie aufgerufen wird, d. H.' Def render_for_search (params) ', die die Methode erzwingt, die 1 Argument erfordert. –

Verwandte Themen