在Rails帮助器的类中使用link_to

时间:2010-01-07 21:19:18

标签: ruby-on-rails class helpers link-to

我有一个使用下面结构的rails helper,但是当我使用它时,我收到了消息

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

2 个答案:

答案 0 :(得分:7)

尝试使用:

self.class.helpers.link_to

因为当前范围内未定义link_to。

以上将适用于控制器,但我猜它也适用于另一个帮助器。如果没有,请尝试:

include ActionView::Helpers::UrlHelper

在帮助者的顶端。

答案 1 :(得分:3)

这是因为在Class Facet中您无权访问模板绑定。 为了调用render_for_search方法,您可能会执行类似

的操作
<%= Facet.new.render_for_search %>

只需覆盖您的initialize方法即可将当前上下文作为参数。 这同样适用于params hash。

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方法,不要将其包装到类中。