Rails根据需要进行模型加载。对于我正在编写的rake任务,我需要能够遍历所有ActiveRecord::Base
个实例(ActiveRecord::Base.send(:subclasses)
可以实现)。
然而,为了使上述工作,他们必须已经加载。有人知道强制所有模型加载的方法吗?理想情况下,我希望不必浏览app/models
,因为我还想捕捉插件添加的模型。
答案 0 :(得分:36)
我需要为rake任务加载所有模型,检查所有记录的有效性,并找到方便的方法eager_load
,可以这样使用:
Rails.application.eager_load!
答案 1 :(得分:14)
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
另一种方式:
(ActiveRecord::Base.connection.tables - %w[schema_migrations]).each do |table|
table.classify.constantize rescue nil
end