在Rails帮助器的类中使用link_to

Mik*_*ton 9 ruby-on-rails class helpers link-to

我有一个使用下面结构的rails帮助器,但是当我使用它时,我得到了消息

undefined method 'link_to'
Run Code Online (Sandbox Code Playgroud)

助手安排如下:

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
Run Code Online (Sandbox Code Playgroud)

mop*_*oke 7

试试这个:

self.class.helpers.link_to
Run Code Online (Sandbox Code Playgroud)

因为link_to未在当前范围中定义.

以上将适用于控制器,但我猜它也可以在另一个帮助器中工作.如果没有,那么尝试:

include ActionView::Helpers::UrlHelper
Run Code Online (Sandbox Code Playgroud)

在帮助者的顶部.


Sim*_*tti 3

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

<%= Facet.new.render_for_search %>
Run Code Online (Sandbox Code Playgroud)

只需重写您的initialize方法即可将当前上下文作为参数。这同样适用于 params 哈希。

class Facet
  def initialize(context)
    @context = context
  end
  def render_for_search
    @context.link_to("Value", @context.params)
  end
end
Run Code Online (Sandbox Code Playgroud)

然后打电话

<%= Facet.new(self).render_for_search %>
Run Code Online (Sandbox Code Playgroud)

否则,render_for_search直接在MyHelper模块内定义方法,而不是将其包装到类中。