2009-12-27 29 views
12

Tôi đang viết một ruby-on-ray Module thư viện:phương pháp xác định '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 

khi tôi gọi render_for_search tôi nhận được lỗi

undefined method 'link_to' 

tôi đã cố gắng đòi hỏi url_helper trực tiếp nhưng không thể hiểu được chuyện gì đang xảy ra.

Trả lời

16

Điều này là do, Trình hỗ trợ url ActionView chỉ khả dụng cho Chế độ xem, không có trong thư mục lib của bạn.

phương pháp link_to được tìm thấy trong ActionView :: Module Helpers :: UrlHelper, ngoài ra bạn wou

vì vậy hãy thử này.

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

Ai đó có thể giải thích lý do tại sao điều này bị bỏ phiếu mà không có bình luận? – GSP

+0

Tôi không thể nói chắc chắn, nhưng quan điểm của tôi dường như phá vỡ khi tôi làm điều này. Không chắc chắn tại sao, nhưng tôi nghi ngờ rằng điều này gây ra một số điều khó khăn xảy ra. – bchurchill

+0

trong Rails 3.2, tính năng này không hoạt động. Điều này một: ActionController :: Base.helpers.link_to – GregT

20

Hãy thử điều này:

ActionController::Base.helpers.link_to 
5

Đơn giản chỉ cần bao gồm các helper không giúp bạn có được nhiều hơn nữa. Những người giúp đỡ giả định rằng họ đang ở trong bối cảnh của một yêu cầu, để họ có thể đọc ra tên miền và như vậy.

Thực hiện theo cách khác xung quanh; bao gồm các mô-đun của bạn trong trình trợ giúp ứng dụng hoặc một cái gì đó tương tự.

# 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 
Các vấn đề liên quan