2010-01-07 57 views
9

我使用下面的structore有軌助手使用的link_to,但是當我使用它,我得到一類在Rails助手

undefined method 'link_to' 

助手被安排爲消息:

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 

回答

3

這是因爲在Class Facet中,您無權訪問模板綁定。 爲了調用方法,你可能做這樣的事情

<%= Facet.new.render_for_search %> 

只需重寫你的initialize法取當前上下文作爲參數。 這同樣適用於params散列。

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

然後調用

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

否則,MyHelper模塊內直接定義方法,並且不它包裝成一個類。

+0

這有效,只有一個小改變。在視圖中我必須做<%= MyHelper :: Facet.new(self).render_for_search%> – 2010-01-08 17:42:55

6
因爲是的link_to不在當前範圍內定義

self.class.helpers.link_to 

嘗試使用此。

以上將適用於控制器,但我猜它也可以在另一個幫助器內工作。如果沒有的話試試:

include ActionView::Helpers::UrlHelper 

在幫手的頂部。

+0

這將不起作用,因爲'params'沒有在類範圍內定義。 – 2010-01-07 23:49:58

+1

你可以通過'params'(或者只是一個特定的參數,例如'params [:month]')將它傳遞給你的helper方法,也就是'def render_for_search(params)'強制需要1個參數的方法。 – 2012-04-28 11:15:41