2010-01-07 19 views
9

Tôi có một helper đường ray bằng cách sử dụng structore dưới đây, nhưng khi tôi sử dụng nó, tôi nhận được thông báoSử dụng link_to trong một lớp học trong một helper Rails

undefined method 'link_to' 

Các helper được bố trí như sau:

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 

Trả lời

3

Điều này là do trong khuôn mặt Lớp bạn không có quyền truy cập vào mẫu liên kết. Để gọi phương thức bạn có thể làm điều gì đó như

<%= Facet.new.render_for_search %> 

Chỉ cần ghi đè phương pháp initialize của bạn để có những bối cảnh hiện nay như là đối số. Điều tương tự cũng áp dụng cho băm params.

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

Sau đó gọi

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

Nếu không, xác định phương pháp trực tiếp trong các mô-đun MyHelper và không quấn nó vào một lớp.

+0

Điều đó có hiệu quả với một thay đổi nhỏ. Theo quan điểm tôi phải làm <% = MyHelper :: Facet.new (self) .render_for_search%> –

6

Hãy thử sử dụng tính năng này:

self.class.helpers.link_to 

Vì link_to không được xác định trong phạm vi hiện tại của bạn.

Ở trên sẽ hoạt động với bộ điều khiển, nhưng tôi đoán nó sẽ hoạt động bên trong một trình trợ giúp khác. Nếu không, hãy thử:

include ActionView::Helpers::UrlHelper 

Ở đầu trình trợ giúp của bạn.

+0

Điều này sẽ không hoạt động vì 'params' không được xác định trong phạm vi lớp. –

+1

Bạn có thể chuyển 'params' (hoặc chỉ là một param cụ thể thông qua' params [: month] 'vào phương thức helper của bạn từ bất cứ nơi nào nó được gọi, nghĩa là' def render_for_search (params) 'thực thi phương thức yêu cầu 1 đối số. –

Các vấn đề liên quan