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)
| 归档时间: |
|
| 查看次数: |
1645 次 |
| 最近记录: |