Использование link_to в классе в помощнике Rails - PullRequest
9 голосов
/ 08 января 2010

У меня есть помощник по rails, использующий 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

Ответы [ 2 ]

7 голосов
/ 08 января 2010

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

self.class.helpers.link_to

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

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

include ActionView::Helpers::UrlHelper

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

3 голосов
/ 08 января 2010

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

...