ActiveRecord::Base.send(:descendants) 不会返回所有模型,除非被触及

Sat*_*B V 3 activerecord ruby-on-rails-3

更新: Rails 3.2 中不再存在此问题

我正在尝试获取一个包含 Rails 3 应用程序中所有模型的数组。我在尝试:

ActiveRecord::Base.send(:descendants)
Run Code Online (Sandbox Code Playgroud)

对于相同的。类似的讨论发生在以下问题中:是否有一种方法可以获取 Rails 应用程序中所有模型的集合?。正如其中一个答案所指出的,我们需要触摸模型才能显示模型。这正是我面临的问题。

我的 Rails 应用程序中有十几个模型,但是

ActiveRecord::Base.send(:descendants) 
Run Code Online (Sandbox Code Playgroud)

返回一个大小为 2 的数组。该数组只有 User 和 ActiveRecord::SessionStore::Session 模型。在我通过触摸触摸模型之前,我不会获得其他模型,例如调用Comment.new 如何在不触摸所有模型的情况下获得列出的所有模型?

另一条可能有用的附加信息是我正在使用设备进行身份验证。就用户模型而言,也许设计正在以所需的方式做事,而我不会对其他模型做这些事情。

预先非常感谢。

dpa*_*luy 5

如果cache_classes打开(默认情况下它在开发中打开,而不是在生产中打开),请首先运行以下命令:

Rails.application.eager_load!
Run Code Online (Sandbox Code Playgroud)