Rails 4.2在ActiveRecord加载后运行rake任务

时间:2016-05-24 18:50:35

标签: ruby-on-rails ruby activerecord rake

我有一些数据,我想在我的添加启动时预先加载。我做了一个佣金任务,但效果很好。我试图将代码放在config/initializers中,但它启动得太早(我需要加载所有模型)。 after_initialize对我来说也不好。我把代码示例放低了

require 'rake'
load File.join(Rails.root, 'lib', 'tasks', 'rights.rake')
Rake::Task['dev:create_rights'].invoke

那么,放置此代码的好地方在哪里?当然我可以把它放在AR :: Base等等,但它很难看。

这是任务,如果它会有所帮助。

namespace :dev do
  desc "Creation of the minimal rights"
  task :create_rights => :environment  do
    klasses = ActiveSupport::DescendantsTracker.descendants(AbstractModel)
    default_rights = RightsList.default_rights
    Role.includes(:rights).all.each do |role|
      klasses.reject{|klass| role.rights.pluck(:klass_name).include? klass.underscore  }.each do |klass|
        Right.create role: role, klass_name: klass.underscore, rights_per_class: default_rights
      end
    end
  end
end

谢谢

更新

通过添加config/application.rb

获得了肮脏的解决方案
config.after_initialize do
  require 'rake'
  load File.join(Rails.root, 'lib', 'tasks', 'rights.rake')
  Rails.application.eager_load!
  Rake::Task['dev:create_rights'].invoke
end

我明白这仍然是错误的方式。这是好方法吗?

0 个答案:

没有答案