22

私はruby-on-railsライブラリモジュールを書いています:

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を直接要求しようとしましたが、何が問題になっているのか理解できません。

4

3 に答える 3

25

これを試して:

ActionController::Base.helpers.link_to
于 2009-12-27T13:33:12.403 に答える
23

これは、ActionView urlhelpersがビューでのみ使用可能であり、libディレクトリでは使用できないためです。

link_toメソッドは、ActionView :: Helpers :: UrlHelperモジュールにあります。さらに、

だからこれを試してみてください。

クラスファセット
   ActionView :: Helpers::UrlHelperを含める
..。
終わり
于 2009-12-27T13:27:39.777 に答える
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
于 2009-12-27T13:38:26.790 に答える