Ruby on rails Rails3.1升级导致Cookie.signed上出现Nomethoder错误

Ruby on rails Rails3.1升级导致Cookie.signed上出现Nomethoder错误,ruby-on-rails,cookies,rspec,ruby-on-rails-3.1,Ruby On Rails,Cookies,Rspec,Ruby On Rails 3.1,我在从Rails 3.0.10升级到Rails 3.1的应用程序中遇到了一些关于cookie store的非常奇怪的问题 我可以将失败的规范与此隔离: class TestController before_filter :check_cookie def index; end private def check_cookie if cookies.signed.present? cookies.delete(:test) end end

我在从Rails 3.0.10升级到Rails 3.1的应用程序中遇到了一些关于cookie store的非常奇怪的问题

我可以将失败的规范与此隔离:

class TestController
  before_filter :check_cookie

  def index; end

  private

  def check_cookie
    if cookies.signed.present?
       cookies.delete(:test)
    end
  end
end
所有调用check_cookie筛选器的规范都会失败,并显示如下错误消息:

NoMethodError:
  You have a nil object when you didn't expect it!
  You might have expected an instance of Array.
  The error occurred while evaluating nil.delete

# ./app/controllers/test_controller.rb:10:in `check_cookie'
为了进一步调试,我尝试在输出
cookies中添加一条语句。在尝试调用
delete
之前先签名

if cookies.signed.present?
    puts "Knock, knock? #{cookies.signed.respond_to?(:delete)}"
    ...
这将输出“true”,但规格仍然失败

带Rspec 2.6.0的运行轨道3.1.0


有没有办法解决这个问题?谢谢

删除cookie之前,请尝试检查cookie是否存在:

if cookies.signed.present? && cookies.has_key?(:test)
   cookies.delete(:test)
end

在删除cookie之前,请尝试检查cookie是否存在:

if cookies.signed.present? && cookies.has_key?(:test)
   cookies.delete(:test)
end

您正在对Cookie调用delete,但正在输入Cookie.signed.respond\u to是否:删除,可能是您应该检查cookies。是否响应?:删除?

您正在对cookies调用delete,但您正在输入cookies.signed.response\u to?:删除,可能是您应该检查cookies。是否响应?:删除