2009-12-27 22 views
12

Sto scrivendo un modulo di libreria ruby-on-rails:metodo non definito '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 

quando chiamo render_for_search ottengo l'errore

undefined method 'link_to' 

Ho provato richiedono url_helper direttamente ma non riesco a capire cosa non va.

risposta

16

Questo perché gli urlhelpers di ActionView sono disponibili solo per le viste, non nella directory lib.

il metodo link_to si trova nel ActionView :: modulo di Helpers :: UrlHelper, più si Wou

in modo da provare questo.

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

Qualcuno può spiegare perché questo è stato votato senza commenti? – GSP

+0

Non posso dirlo con certezza, ma il mio punto di vista sembrava interrompersi quando lo faccio. Non so perché, ma ho il sospetto che ciò accada. – bchurchill

+0

in Rails 3.2, questo non funziona. Questo fa: ActionController :: Base.helpers.link_to – GregT

20

Prova questo:

ActionController::Base.helpers.link_to 
5

Semplicemente tra cui l'assistente non ottiene molto di più. Gli helper presumono di trovarsi nel contesto di una richiesta, in modo che possano leggere il nome del dominio e così via.

Al contrario; includi i tuoi moduli nell'helper dell'applicazione, o qualcosa del genere.

# 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