nil的未定义方法`session':RSpec Rails中的NilClass

时间:2014-01-01 19:04:09

标签: ruby-on-rails rspec

我在Rails中的规范有以下帮助:

include ApplicationHelper

def sign_in(user)
  session[:access_token] = user.access_token
end

def signed_in?
  current_user.present?
end

def current_user
  User.find_by(access_token: session[:access_token])
end

但是我已经为nil提供了“未定义的方法`session”:NilClass“。我该如何解决?提前致谢。

1 个答案:

答案 0 :(得分:1)

问题是您从中调用这些方法的上下文。会话通常存在于控制器中。如果您要从类中调用其中一个方法,那么Class将支持方法调用。现在有一个nil类调用会话方法。您需要处于会话的适当上下文中才能访问会话。

请注意这里的不同背景:

class PagesController < ApplicationController

  #NOTE: within the context of a class in this case class PagesController

  include ApplicationHelper

  def some_method
    sign_in(user)
  end
end

如果将方法调用包装在类上下文中:

class Utility
  include ApplicationHelper
  def self.sign_in_a_user(user)
    sign_in(user)
  end
end

然后错误更有意义:

undefined local variable or method `session' for Utility:Class

反正! nil:NilClass是您所处的背景。

见类似问题:

Access session in Helper file ? Rails 3