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

时间:2010-07-14 12:03:11

标签: ruby-on-rails ruby rake

Rails根据需要进行模型加载。对于我正在编写的rake任务,我需要能够遍历所有ActiveRecord::Base个实例(ActiveRecord::Base.send(:subclasses)可以实现)。

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

2 个答案:

答案 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