2010-01-07 17 views
9

Rails yardımcı bir sınıfta link_to kullanarak, ama bunu kullandığımda yardımcı olarak düzenlenmiştiraşağıda structore kullanarak raylar yardımcınız var

undefined method 'link_to' 

mesaj almak:

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 

cevap

3

Bunun nedeni, Sınıf Düzeni dahilinde şablon bağlamasına erişiminizin olmamasıdır. yöntemi çağırmak için muhtemelen gibi bir şey

<%= Facet.new.render_for_search %> 

Tartışmanın gibi güncel bağlam çekmek için initialize yöntemini geçersiz kılar. Aynı, parazitler için de geçerlidir.
class Facet 
    def initialize(context) 
    @context = context 
    end 
    def render_for_search 
    @context.link_to("Value", @context.params) 
    end 
end 

Sonra Aksi

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

çağrı MyHelper modül içinde doğrudan yöntemini tanımlar ve bir sınıf olarak kaydırma değil.

+0

Bu, küçük bir değişiklikle çalışır. Görüşüme göre <% = MyHelper :: Facet.new (self) .render_for_search%> –

6

Bu kullanmayı deneyin:

self.class.helpers.link_to 

link_to geçerli kapsam tanımlı değil çünkü.

Yukarıdakiler bir denetleyici için çalışacaktır, ancak sanırım başka bir yardımcıda çalışacaktır. Değilse, o zaman deneyin:

Yardımcınızın üst kısmında.

+0

Bu işlev işe yaramaz çünkü 'params' sınıf kapsamı içinde tanımlanmadı. –

+1

"Params" (veya örneğin params [: month] 'yoluyla belirli bir parametreyi) örneğin, 1 argümanını gerektiren yöntemi uygulayan, çağrıldığı yerden, yani def render_for_search (params) 'dan yardımcınızın yöntemine iletebilirsiniz. –

İlgili konular