我有一个方法,我想执行一些搜索逻辑,然后保存一个搜索对象,其中包含搜索过的人的搜索字符串和用户ID。
搜索/保存逻辑似乎工作正常,但是当我尝试获取当前用户(使用应用程序控制器中的方法)时,它会抛出与会话有关的运行时错误:
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
...
端
答案 0 :(得分:0)
不完全是解决此问题的直接方法,但我能够通过让函数接受除搜索查询之外的用户来解决它,而不是尝试从其中调用current_user方法。调用该操作的类可以正常访问current_user方法。