我将Rails应用程序更新到了更高版本的Rails,现在我的模型之一无法使用,好像它是空的,好像Rails并不了解它的结构以及如何填充它。
此模型是Task,基于单表继承:
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模型,既不能从数据库中读取记录,也不能创建新记录。其他相关模型“事件”和“阶段”按预期工作。
[当我通过检查Task类并从Task控制器#显示我得到的:Task.first
在生产模式下对其进行调试时,
Task.inspect => Task()
Task.first.inspect => #<Task >
Task.first.nil? => false
此模型似乎无效。其他型号则完美加载。
[当Rails尝试加载记录时,应用程序不会失败,但会出现错误,但是稍后,由于模型为空,控制器尝试访问任何字段时,应用程序都会失败。
一些重要发现:
config.cache_classes = true
下失败,否则在其他情况下运行良好。这可能是https://stackoverflow.com/a/58867450/1388302的副本
[还有其他定义任务-可能对其进行扩展。不要那样做使用前置。否则,自动加载器会发现该意外定义,并且不会加载您想要的定义。
或者现在,任务也由您要包含的内容定义。询问Task.superclass可能很有趣。
这可能是因为Rails 6更改了自动加载器。