Rails — запрос сеанса с нулевой ошибкой

#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 просто отлично.