在 Rails 助手的类中使用 link_to

发布于 2024-08-17 03:34:15 字数 518 浏览 2 评论 0原文

我有一个使用下面的结构体的 Rails 助手,但是当我使用它时,我收到消息

undefined method 'link_to'

The helper is returned as:

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

I have a rails helper using the structore below, but when I use it I get the message

undefined method 'link_to'

The helper is arranged as:

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

花辞树 2024-08-24 03:34:15

尝试使用这个:

self.class.helpers.link_to

因为 link_to 没有在您当前的作用域中定义。

上面的内容适用于控制器,但我猜它也适用于另一个助手。如果没有,那么尝试:

include ActionView::Helpers::UrlHelper

在你的助手的顶部。

Try using this:

self.class.helpers.link_to

Because link_to is not defined in your current scope.

The above will work for a controller, but I'm guessing it will work inside another helper as well. If not then try:

include ActionView::Helpers::UrlHelper

At the top of your helper.

-残月青衣踏尘吟 2024-08-24 03:34:15

这是因为在 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 %>

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

This is because within the Class Facet you don't have access to the template binding.
In order to call the render_for_search method you probably do something like

<%= Facet.new.render_for_search %>

Just override your initialize method to take the current context as argument.
The same applies to the params hash.

class Facet
  def initialize(context)
    @context = context
  end
  def render_for_search
    @context.link_to("Value", @context.params)
  end
end

Then call

<%= Facet.new(self).render_for_search %>

Otherwise, define the render_for_search method directly within the MyHelper module and don't wrap it into a class.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文