Используя link_to в классе в помощнике направляющих

У меня есть помощник направляющих, использующий structore ниже, но когда я использую его, я получаю сообщение

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
9
задан Mike Sutton 7 January 2010 в 21:19
поделиться

2 ответа

Это потому, что в фасете класса у вас нет доступа к привязке шаблона. Чтобы вызвать метод 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 и не помещайте его в класс.

3
ответ дан 4 December 2019 в 21:10
поделиться

Попробуйте использовать это:

self.class.helpers.link_to

Потому что link_to не определено в вашей текущей области видимости.

Вышеуказанное будет работать для контроллера, но я предполагаю, что оно будет работать и внутри другого помощника. Если нет, то попробуйте:

include ActionView::Helpers::UrlHelper

В верхней части вашего помощника.

.
7
ответ дан 4 December 2019 в 21:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: