Вопрос

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

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
Это было полезно?

Решение

Это связано с тем, что внутри фасета класса у вас нет доступа к привязке шаблона.Для того, чтобы позвонить в render_for_search метод, который вы, вероятно, делаете что-то вроде

<%= Facet.new.render_for_search %>

Просто переопределите свой initialize метод, принимающий текущий контекст в качестве аргумента.То же самое относится и к хешу параметров.

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 модуль и не помещайте его в класс.

Другие советы

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

self.class.helpers.link_to

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

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

include ActionView::Helpers::UrlHelper

Наверху ваш помощник.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top