Как вызвать методы ApplicationController из ApplicationHelper

#ruby-on-rails #ruby #ruby-on-rails-3 #controller #view-helpers

#ruby-on-rails #ruby #ruby-on-rails-3 #контроллер #просмотр-помощники

Вопрос:

Я хочу предоставить ссылки 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. Непроверенная мысль: проверьте, с каким именем класса он вызывается. Помогает ли переименование метода во что-то другое (возможно, send_data — это уже определенный метод rails?)

2. Да, это метод, определенный в rails, но, похоже, он доступен только через контроллеры.

Ответ №1:

Используйте helper_method .

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

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

 class ApplicationController < ActionController::Base

  helper_method :foo

  def foo
    "bar"
  end

end
  

Теперь foo метод доступен как для контроллеров , так и для представлений.

Комментарии:

1. Я думаю, что этот значок щенка заставил меня поддержать вас. Такой умный Хэриш!

Ответ №2:

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

включить ApplicationHelper

в файл ApplicationController?