#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?