2009-12-27 16 views
12

Estoy escribiendo un módulo de biblioteca rubí sobre raíles:método no definido 'link_to'

module Facets 

    class Facet 
    attr_accessor :name, :display_name, :category, :group, :special 

    ... 

    URI = {:controller => 'wiki', :action => 'plants'} 
    SEARCH = {:status => WikiLink::CURRENT} 

    #Parameters is an hash of {:field => "1"} values 
    def render_for_search(parameters) 
    result = link_to(display_name, URI.merge(parameters).merge({name => "1"})) 
    count = WikiPlant.count(:conditions => (SEARCH.merge(parameters.merge({name => "1"})))) 
    result << "(#{count})" 
    end 
    end 

    ... 

end 

cuando llamo render_for_search me sale el error

undefined method 'link_to' 

He intentado que requiere url_helper directamente pero no puede descubrir qué está pasando mal.

Respuesta

16

Esto se debe a que los urlhelpers de ActionView solo están disponibles para las vistas, no en su directorio lib.

el método link_to se encuentra en el módulo de Ayudantes ActionView :: :: UrlHelper, además de que Wou

a fin de tratar esto.

 
class Facet 
    include ActionView::Helpers::UrlHelper 
... 
end 
+1

¿Alguien puede explicar por qué esto fue rechazado sin comentarios? – GSP

+0

No puedo decirlo con certeza, pero mi opinión pareció romperse cuando hago esto. No estoy seguro por qué, pero sospecho que esto hace que sucedan algunas cosas complicadas. – bchurchill

+0

en Rails 3.2, esto no funciona. Éste lo hace: ActionController :: Base.helpers.link_to – GregT

20

Prueba esto:

ActionController::Base.helpers.link_to 
5

Simplemente incluyendo el ayudante no te lleva mucho más allá. Los ayudantes asumen que están en el contexto de una solicitud, para que puedan leer el nombre de dominio, etc.

Hágalo al revés; incluya sus módulos en la aplicación de ayuda, o algo así.

# lib/my_custom_helper.rb 
module MyCustomHelper 
    def do_stuff 
    # use link_to and so on 
    end 
end 

# app/helpers/application_helper.rb 
module ApplicationHelper 
    include MyCustomHelper 
end 
Cuestiones relacionadas