Rails模型无法正确加载

问题描述 投票:0回答:1

我将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下失败,否则在其他情况下运行良好。
  • 在Rails控制台中效果很好。
  • task.rb模型文件即使在失败的上下文中也会被加载。模型文件结构平坦,所有模型都在app / models /
  • 在从Ruby 1.9.3和Rails 3.1升级到Ruby 2.3.8和Rails 3.2.22之前,它曾经工作得很好。
ruby-on-rails ruby
1个回答
0
投票

这可能是https://stackoverflow.com/a/58867450/1388302的副本

[还有其他定义任务-可能对其进行扩展。不要那样做使用前置。否则,自动加载器会发现该意外定义,并且不会加载您想要的定义。

或者现在,任务也由您要包含的内容定义。询问Task.superclass可能很有趣。

这可能是因为Rails 6更改了自动加载器。

© www.soinside.com 2019 - 2024. All rights reserved.