我有一个带有cron作业的Rails 4应用程序,该应用程序每天运行一次以下任务:
task :update_packs => :environment do
@all_users = User.all
@all_users.each do |user|
today = where(:created_at => (Time.now.beginning_of_day..Time.now))
@packs = user.default_packs
if user.packs.today.count >= 1
puts "ERROR: User already has a record today."
else
user.packs.create(:amount => @packs)
end
end
end
但是,当我运行任务时,出现以下错误:
NoMethodError: undefined method `where' for main:Object
/home/ben/rails_projects/hartwig/lib/tasks/packs.rake:7:in `block (2 levels) in <top (required)>'
/home/ben/.rvm/gems/ruby-2.1.1/gems/activerecord-4.1.0/lib/active_record/relation/delegation.rb:46:in `each'
/home/ben/.rvm/gems/ruby-2.1.1/gems/activerecord-4.1.0/lib/active_record/relation/delegation.rb:46:in `each'
/home/ben/rails_projects/hartwig/lib/tasks/packs.rake:6:in `block in <top (required)>'
/home/ben/.rvm/gems/ruby-2.1.1/bin/ruby_executable_hooks:15:in `eval'
/home/ben/.rvm/gems/ruby-2.1.1/bin/ruby_executable_hooks:15:in `<main>'
Tasks: TOP => update_packs
我试图用条件替换where,但是遇到了同样的错误。有任何想法吗?
这样编写循环:
@all_users.each do |user|
@packs = user.default_packs
if user.packs.where(:created_at => (Time.now.beginning_of_day..Time.now).exists?
puts "ERROR: User already has a record today."
else
user.packs.create(:amount => @packs)
end
end
但是,我强烈建议您为Pack
模型添加范围:
class Pack < ActiveRecord::Base
scope :today, -> { where(:created_at => (Time.now.beginning_of_day..Time.now)) }
end
然后您的任务将如下所示:
@all_users.each do |user|
@packs = user.default_packs
if user.packs.today.exists?
puts "ERROR: User already has a record today."
else
user.packs.create(:amount => @packs)
end
end
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句