Подтвердить что ты не робот

Как вызвать методы 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 (и другие необходимые методы) доступному помощнику?

4b9b3361

Ответ 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?