#ruby-on-rails
#ruby-on-rails
Вопрос:
У меня есть метод, с помощью которого я хочу выполнить некоторую логику поиска, а затем сохранить объект поиска, содержащий искомую строку и идентификатор пользователя человека, который выполнял поиск.
В остальном логика поиска / сохранения, похоже, работает нормально, но когда я пытаюсь получить текущего пользователя (используя метод из контроллера приложения), он выдает ошибку времени выполнения, связанную с сеансом:
ActionController::Metal#session delegated to @_request.session, but @_request is nil: #<SearchController:0x1038e32e0 @action_has_layout=true, @view_context_class=nil, @_status=200, @_headers={"Content-Type"=>"text/html"}>
Вот метод в контроллере поиска:
class SearchController < ApplicationController
...
def factualsearch(search)
if search
searchquery = Search.new
# this causes the error
if current_user
searchquery.user = current_user
end
searchquery.search_string = search
searchquery.save
...
end
@results
end
завершение
Вот метод current_user, который я пытаюсь вызвать из моего контроллера приложения:
def current_user
return unless session[:user_id]
@current_user ||= User.find_by_id(session[:user_id])
end
helper_method :current_user
Вот контроллер страниц, где я вызываю метод:
class PagesController < ApplicationController
...
def search
searchcontrol = SearchController.new
@results = searchcontrol.factualsearch(params[:search])
end
...
завершение
Ответ №1:
Не совсем прямой способ решить эту проблему, но я смог обойти ее, попросив функцию принять пользователя в дополнение к поисковому запросу, вместо того, чтобы пытаться вызвать метод current_user изнутри него. Класс, вызывающий действие, может получить доступ к методу current_user просто отлично.