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

Ruby on rails 如何强制Rails加载所有模型?,ruby-on-rails,ruby,rake,Ruby On Rails,Ruby,Rake,Rails不按需建模加载。对于我正在编写的rake任务,我需要能够迭代所有ActiveRecord::Base实例(这在ActiveRecord::Base.send(:子类)中是可能的) 但是,要使上述功能正常工作,必须已加载它们。有人知道强制加载所有模型的方法吗?理想情况下,我不想翻看应用程序/模型,因为我也想看到插件添加的模型。rails 2: Dir[Pathname(RAILS_ROOT) + 'app/models/**/*.rb'].each do |path| require

Rails不按需建模加载。对于我正在编写的rake任务,我需要能够迭代所有
ActiveRecord::Base
实例(这在
ActiveRecord::Base.send(:子类)
中是可能的)

但是,要使上述功能正常工作,必须已加载它们。有人知道强制加载所有模型的方法吗?理想情况下,我不想翻看
应用程序/模型
,因为我也想看到插件添加的模型。

rails 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

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


Rails.application.eager\u加载

问题是,正如问题中所指出的,它不会捕获插件添加的模型。具体来说,我正在编写的插件的一个重要案例是Spree shop,其中基本上没有任何模型位于
app/models
中,只需在glob=>
Dir[Rails.root+'***/app/models/***.rb']
的开头添加
***/
,为什么需要浏览所有的模型?它是一个工具,基本上可以从所有的:has_许多关系中构建一个图表,然后以有趣的方式查询这些关系。请注意,
Rails.root在Rails 2中已经使用了很长一段时间。我真的比较喜欢这个答案。在我看来,这是一种更干净的做事方式。需要注意的是,即使设置了
Rails.application.config.eager\u load=true
,这在Rails 6.0中也不起作用。