9

我有一个使用下面的structore的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

这是因为在 Class Facet 中,您无权访问模板绑定。为了调用该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 回答