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

sco*_*chi 14 ruby rake ruby-on-rails

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

但是,为了使上述工作,它们必须已经加载.有人知道强制所有模型加载的方法吗?理想情况下,我不想一直浏览,app/models因为我想要抓住插件添加的模型.

DSi*_*mon 41

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

Rails.application.eager_load!

  • 我真的更喜欢这个答案.在我看来,这是一种更清洁的做事方式. (6认同)

tig*_*tig 15

铁轨2:

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

铁轨3:

Dir[Rails.root + 'app/models/**/*.rb'].each do |path|
  require path
end
Run Code Online (Sandbox Code Playgroud)

其他方式:

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

  • 请注意,Rails.2中已经提供了"Rails.root"很长一段时间了. (2认同)