如何强制Rails加载所有模型?
Rails确实按需加载模型。 对于我正在编写的rake任务,我需要能够遍历所有ActiveRecord::Base
实例(可以使用ActiveRecord::Base.send(:subclasses)
)。
但是,为了使上述工作,它们必须已经加载。 有人知道强制所有模型加载的方法吗? 理想情况下,我不想通过app/models
因为我想要捕获插件添加的模型。
铁轨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任务加载所有模型来检查所有记录的有效性,并找到了方便的方法eager_load
,它可以像下面这样使用:
Rails.application.eager_load!