Как вызвать методы ApplicationController из ApplicationHelper
Я хочу предоставить csv-ссылки в представлении, и я поместил код генерации csv в ApplicationHelper
. Однако я получаю эту ошибку:
undefined method `send_data' for #<#<Class:0x0000010151c708>:0x0000010151a070>
ссылаясь на это:
send_data content, :type => "text/plain",
:filename => filename,
:disposition => 'attachment'
Если я помещаю код csv в контроллер, он отлично работает. Я надеялся использовать помощника, чтобы избежать необходимости определять маршруты для каждого контроллера, для которого я хочу предоставить параметры csv (у меня есть группа). Как я могу сделать send_data
(и другие необходимые методы) доступному помощнику?
Ответы
Ответ 1
Используйте helper_method
.
По умолчанию методы в ApplicationController
доступны только внутри контроллеров.
Добавьте метод в ApplicationController
и покажите его как вспомогательный метод с helper_method
:
class ApplicationController < ActionController::Base
helper_method :foo
def foo
"bar"
end
end
Теперь метод foo
доступен как для контроллеров, так и для видов.
Ответ 2
Если проблема заключается в том, чтобы сделать методы в ApplicationHelper доступными во всех контроллерах, почему бы не добавить строку
include ApplicationHelper
в файл ApplicationController?