Rails - 会话请求是nil错误

时间:2011-05-13 23:19:42

标签: ruby-on-rails

我有一个方法,我想执行一些搜索逻辑,然后保存一个搜索对象,其中包含搜索过的人的搜索字符串和用户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

...

1 个答案:

答案 0 :(得分:0)

不完全是解决此问题的直接方法,但我能够通过让函数接受除搜索查询之外的用户来解决它,而不是尝试从其中调用current_user方法。调用该操作的类可以正常访问current_user方法。