我有一些数据,我想在我的添加启动时预先加载。我做了一个佣金任务,但效果很好。我试图将代码放在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
我明白这仍然是错误的方式。这是好方法吗?