У меня есть помощник направляющих, использующий 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
Это потому, что в фасете класса у вас нет доступа к привязке шаблона.
Чтобы вызвать метод 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
и не помещайте его в класс.
Попробуйте использовать это:
self.class.helpers.link_to
Потому что link_to не определено в вашей текущей области видимости.
Вышеуказанное будет работать для контроллера, но я предполагаю, что оно будет работать и внутри другого помощника. Если нет, то попробуйте:
include ActionView::Helpers::UrlHelper
В верхней части вашего помощника.
.