ActiveRecord Migration&Rake任务没有加载模型?

gmo*_*iey 5 migration rake activerecord ruby-on-rails

我知道你可以做这样的事情来加载rails环境:

  task :my_task => :environment do 
    MyModel.find(1)
  end
Run Code Online (Sandbox Code Playgroud)

但似乎模型中的代码没有执行.我正在使用acts_as_audited,并且有一个很好的类函数可以检索所有正在审计的模型.电话看起来像:

Audit.audited_classes
Run Code Online (Sandbox Code Playgroud)

要将模型指定为可审核,只需将此行添加到模型中:

acts_as_audited
Run Code Online (Sandbox Code Playgroud)

当在控制台中执行audited_classes时,我得到一个包含所有审计类的数组; 但是,当我从rake任务(或迁移)中执行它时,我得到一个空数组.

[编辑]

在玩了一下之后,我注意到如果模型在被引用之前没有被实际加载(即延迟加载).我认为在配置中将cache_classes设置为true会解决这个问题,但它们似乎仍然是延迟加载的.

一种可能的解决方案是遍历所有模型(如本文所述:有没有办法在Rails应用程序中获取所有模型的集合?)但这看起来有点hacky,我希望有一个清洁的方式.

有任何想法吗?

谢谢

小智 1

您可以添加 config/environments/development.rb:

Dir[Rails.root.join('app', 'models', '**/*')].each { |file| File.basename(file, '.rb').camelize.constantize }
Run Code Online (Sandbox Code Playgroud)