我有两个名为Scope和ScopeItem的ActiveRecord模型,它具有has_many关系:
class Scope < ActiveRecord::Base
has_many :scope_items
end
class ScopeItem < ActiveRecord::Base
belongs_to :scope
end
我还有一个rake任务,用于后台作业加载一组范围(引用)数据:
task :scopes => :environment do
scope = Scope.create!(
# params
)
5.times do |n|
scope.scope_items.create!({
# more params
})
end
end
end
rake任务在开发中运行良好,但是当我转移到临时/生产设置时,任务失败,说Scope没有名为scope_items的方法。
我比较了两种环境中的设置,并通过实验确定如果我更改以下设置,我可以重现开发中的错误:
# development.rb
config.cache_classes = false
# !development.rb
config.cache_classes = true # all others use this
在我看来,当打开此设置时,加载路径会发生变化。这是真的,如果有的话,是否有解决方法?
答案 0 :(得分:0)
我们通过添加以下内容找到了rake任务的解决方法:
My::Application.configure do
config.cache_classes = false
end
load "#{Rails.root}/app/models/scope.rb"
这会让环境重新加载范围类,任务运行正常。
pbobb可能已经使用了保留字的东西了,尽管奇怪的是应用程序仍然适用于所有环境。