Использование link_to в классе в помощнике Rails
-
19-09-2019 - |
Вопрос
У меня есть помощник по рельсам, использующий приведенную ниже структуру, но когда я использую его, я получаю сообщение
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
Наверху ваш помощник.