如何强制 Rails 加载所有模型?

发布于 2024-09-09 22:12:58 字数 251 浏览 2 评论 0原文

Rails 按需加载模型。对于我正在编写的 rake 任务,我需要能够迭代所有 ActiveRecord::Base 实例(这可以通过 ActiveRecord::Base.send(:subclasses)< /代码>)。

然而,为了使上述工作正常,它们必须已经被加载。有人知道强制加载所有模型的方法吗?理想情况下,我不想浏览 app/models 因为我也想捕获插件添加的模型。

Rails does model loading on demand. For a rake task that I'm writing, I need to be able to iterate over all ActiveRecord::Base instances (which is possible with ActiveRecord::Base.send(:subclasses)).

However, for the above to work, they have to already be loaded. Anyone know of a way to force all models to load? Ideally I'd like to not have to poke through app/models since I'd like to catch models added by plugins as well.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

避讳 2024-09-16 22:12:58

我需要为 rake 任务加载所有模型来检查所有记录的有效性,并找到了方便的方法 eager_load< /code>,可以像这样简单地使用:

Rails.application.eager_load!

I needed all models loaded for a rake task that checks the validity of all records, and found the handy method eager_load, which can be used simply like so:

Rails.application.eager_load!

阳光下慵懒的猫 2024-09-16 22:12:58

导轨 2:

Dir[Pathname(RAILS_ROOT) + 'app/models/**/*.rb'].each do |path|
  require path
end

导轨 3:

Dir[Rails.root + 'app/models/**/*.rb'].each do |path|
  require path
end

另一种方式:

(ActiveRecord::Base.connection.tables - %w[schema_migrations]).each do |table|
  table.classify.constantize rescue nil
end

rails 2:

Dir[Pathname(RAILS_ROOT) + 'app/models/**/*.rb'].each do |path|
  require path
end

rails 3:

Dir[Rails.root + 'app/models/**/*.rb'].each do |path|
  require path
end

another way:

(ActiveRecord::Base.connection.tables - %w[schema_migrations]).each do |table|
  table.classify.constantize rescue nil
end
梦断已成空 2024-09-16 22:12:58

Rails 7.0

Rails.initialize!

实际上会加载所有模型以及您可能需要的任何内容。

也适用于 .rake 文件(rails cli 命令)。

rails 7.0

Rails.initialize!

Will actually load all the models and anything you could need.

Works fine for .rake files (rails cli commands) too.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文