Обновление Rails3.1, вызывающее NoMethodError на cookies.signed - PullRequest
2 голосов
/ 10 октября 2011

Я столкнулся с некоторыми довольно странными проблемами, связанными с хранилищем файлов cookie в приложении, которое я обновил с Rails 3.0.10 до Rails 3.1.

Я могу выделить ошибочные спецификации для этого:

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.signed, прежде чем пытаться вызвать delete:

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

Это выводит "true", но спецификации по-прежнему не работают.

Запуск Rails 3.1.0 с Rspec 2.6.0.

Есть идеи, как это исправить? Спасибо!

Ответы [ 2 ]

0 голосов
/ 10 октября 2011

Вы звоните удалить cookie, но вы проверяете, есть ли cookie.signed.respond_to?: delete, может быть стоит проверить cookies.respond_to?: Удалить

0 голосов
/ 10 октября 2011

Попробуйте проверить, существует ли файл cookie перед его удалением:

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