2011-10-10 94 views
2

我遇到了一些有关在我从Rails 3.0.10升级到Rails 3.1的应用程序中存储cookie的奇怪问题。Rails3.1升级导致cookie上出现NoMethodError.signed

我可以在没有规范隔离到这一点:

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' 

为了进一步调试,我尝试添加的声明在尝试调用delete之前输出cookies.signed

if cookies.signed.present? 
    puts "Knock, knock? #{cookies.signed.respond_to?(:delete)}" 
    ... 

这输出“真”,但规格仍然失败。

使用Rspec 2.6.0运行Rails 3.1.0。

任何想法如何解决这个问题?谢谢!

回答

0

尝试检查,看看删除它之前,如果cookie存在:

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

要调用删除Cookie,但你是否inpecting cookies.signed.respond_to? :删除,可能你应该检查cookies.respond_to? :删除?