2010-01-07 9 views
9

tengo un ayudante carriles utilizando el structore abajo, pero cuando lo uso me sale el mensaje deUsando link_to en una clase en un ayudante rieles

undefined method 'link_to' 

El ayudante está dispuesto como:

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 

Respuesta

3

Esto se debe a que dentro de Class Facet no tiene acceso al enlace de la plantilla. Con el fin de llamar al método es probable que algo así como

<%= Facet.new.render_for_search %> 

Sólo anular su método initialize tomar el contexto actual como argumento. Lo mismo se aplica a hash params.

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

luego llamar a

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

De lo contrario, se define el método directamente dentro del módulo MyHelper y no lo envuelva en una clase.

+0

Eso funciona, con un pequeño cambio. En la vista que tenía que hacer <% = MyHelper :: Facet.new (self) .render_for_search%> –

6

Trate de usar esto:

self.class.helpers.link_to 

Debido link_to no está definido en el ámbito actual.

Lo anterior funcionará para un controlador, pero supongo que funcionará dentro de otro ayudante también. Si no, intente:

include ActionView::Helpers::UrlHelper 

En la parte superior de su ayudante.

+0

Esto no funcionará porque 'params' no está definido dentro del alcance de la clase. –

+1

Puede pasar 'params' (o simplemente un parámetro particular por' params [: month] 'por ejemplo) a su método de ayuda desde donde sea que se llame, es decir' def render_for_search (params) 'que aplica el método que requiere 1 argumento. –

Cuestiones relacionadas