неопределенный метод `httpdate’ для «…»:Строка

#ruby-on-rails #ruby-on-rails-5

#ruby-on-rails #ruby-on-rails-5

Вопрос:

Этот код внезапно перестал работать, и я не понимаю почему.

 class MyClass < ApplicationController
  ...
  def method
    @myobject = @my_objects.order(:updated_at).last
    if stale?(@myobject)
      ...
    end
  end
end
  

Проблема в если устаревший?(@myobject) и ошибка

Ошибка NoMethodError в MyClass#my_method

неопределенный метод `httpdate’ для «2016-10-23 20:44:26 UTC»:Строка

actionpack (5.0.0.1) lib/action_dispatch/http/cache.rb:64: в `last_modified=’


Проблема была решена путем замены кода:

 class MyClass < ApplicationController
  ...
  def my_method
    @myobject = @my_objects.order(:updated_at).last
    t = Time.parse(@myobject.updated_at)
    if stale?(etag: @myobject, last_modified: t)
      ...
    end
  end
end
  

Но первая версия тоже должна работать по API doc, и это сработало!

Я хотел бы понять причины, по которым первая версия стала неработоспособной, и устранить проблему. Все, что я недавно изменил — обновление пакетов Debian, но я не думаю, что это было причиной.


ОС: Debian GNU/ Linux 8.6 (jessie)

Версия Ruby: ruby-2.3.0 [x86_64] (rvm)

Версия Rails: 5.0.0.1

Ответ №1:

Это может быть из-за поля Дата-время. Всякий раз, когда вы используете это, вам нужно анализировать Time.parse для определения времени или Date.parse для определения даты. Часовой пояс также является одной из основных проблем.

Пожалуйста, обратитесь к rails Doc для этого.