9

以下の構造を使用する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
4

2 に答える 2

7

これを使用してみてください:

self.class.helpers.link_to

link_toが現在のスコープで定義されていないためです。

上記はコントローラーでも機能しますが、別のヘルパーでも機能すると思います。そうでない場合は、次を試してください。

include ActionView::Helpers::UrlHelper

ヘルパーの上部にあります。

于 2010-01-07T21:27:48.450 に答える
3

これは、クラスファセット内ではテンプレートバインディングにアクセスできないためです。メソッドを呼び出すには、render_for_searchおそらく次のようなことを行います

<%= 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 %>

render_for_searchそれ以外の場合は、モジュール内でメソッドを直接定義MyHelperし、クラスにラップしないでください。

于 2010-01-07T23:48:37.850 に答える