Rails3.1升级导致cookie上出现NoMethodError.signed
问题描述:
我遇到了一些有关在我从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。
任何想法如何解决这个问题?谢谢!
答
尝试检查,看看删除它之前,如果cookie存在:
if cookies.signed.present? && cookies.has_key?(:test)
cookies.delete(:test)
end
答
要调用删除Cookie,但你是否inpecting cookies.signed.respond_to? :删除,可能你应该检查cookies.respond_to? :删除?