#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 для этого.