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!
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)