2009-12-27 51 views
12

我正在写的Ruby-on-轨库模块:未定义的方法 '的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 

当我打电话render_for_search我得到的错误

undefined method 'link_to' 

我试过直接要求url_helper但无法弄清楚发生了什么问题。

回答

16

这是因为,ActionView urlhelpers只对视图有效,不在你的lib目录中。

的方法的link_to在::的ActionView ::助手模块UrlHelper发现,再加上你WOU

这样试试这个。

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

有人可以解释为什么这被拒绝而没有评论? – GSP 2013-01-23 17:54:56

+0

我不能肯定地说,但当我这样做时,我的观点似乎破裂了。不知道为什么,但我怀疑这会导致一些棘手的事情发生。在Rails 3.2中使用 – bchurchill 2013-01-31 08:07:05

+0

,这不起作用。这个可以:ActionController :: Base.helpers.link_to – GregT 2013-02-08 06:57:23

20

试试这个:

ActionController::Base.helpers.link_to 
5

只要引入助手没有让你更进一步。助手假定他们处于请求的上下文中,以便他们可以读出域名等。

以相反的方式去做;将你的模块包含在应用程序助手中,或类似的东西。

# 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