Как вызвать методы ApplicationController из ApplicationHelper - PullRequest
48 голосов
/ 13 мая 2011

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

Ответы [ 2 ]

110 голосов
/ 13 мая 2011

Использование helper_method.

По умолчанию методы в ApplicationController доступны только внутри контроллеров.

Добавьте метод к ApplicationController и предоставьте его как вспомогательный метод с помощью helper_method:

class ApplicationController < ActionController::Base

  helper_method :foo

  def foo
    "bar"
  end

end

Теперь метод foo доступен для обоих контроллеров и Views.

10 голосов
/ 29 мая 2011

Если проблема заключается в том, чтобы сделать методы в ApplicationHelper доступными на всех контроллерах, почему бы не добавить строку

include ApplicationHelper

в файл ApplicationController?

...