Я обновил свое приложение Rails до более новой версии Rails, и теперь одна из моих моделей непригодна для использования, как если бы она была загружена пустой, как будто Rails не знал о ее структуре и о том, как ее заполнять.
Эта модель является задачей и основана на наследовании одной таблицы:
class Activity < ActiveRecord::Base
(...)
end
class Task < Activity
(...)
end
class Event < Activity
(...)
end
class Phase < Activity
(...)
end
Вот что ожидается, когда модель загружена правильно и все работает хорошо (та же модель из-за STI):
Activity.inspect => Activity(id: integer, type: string, project_id: integer, author_id: integer, subject: text, description: text, (...), created_at: datetime, updated_at: datetime)
Task.inspect => Task(id: integer, type: string, project_id: integer, author_id: integer, subject: text, description: text, (...), created_at: datetime, updated_at: datetime)
Event.inspect => Event(same model as above ...)
(...)
Однако с момента обновления Rails вообще не может использовать модель Task, ни для чтения записи из базы данных, ни для создания новой. Другие связанные модели Event и Phase работают должным образом.
Когда я отлаживаю его в производственном режиме, проверяя класс Task и Task.first
из контроллера задач # show, я получаю:
Task.inspect => Task()
Task.first.inspect => #<Task >
Task.first.nil? => false
Эта модель выглядит так, как будто она была недействительной. Другие модели загружены отлично.
Приложение не завершается с ошибкой, когда Rails пытается загрузить запись, но не удается позднее, когда контроллер пытается получить доступ к любому полю, потому что модель пуста.
Некоторые важные наблюдения :
- Сбой возможен только в производственном режиме, но хорошо работает в режиме разработки или не работает только при
config.cache_classes = true
, но в остальном работает хорошо. - Хорошо работает в консоли Rails Файл модели.
- task.rb загружается даже в некорректном контексте. Структура файлов модели плоская, все модели находятся в app / models /
- . До обновления с Ruby 1.9.3 и Rails 3.1 до Ruby 2.3.8 и Rails 3.2.22 он хорошо работал.