这是我试图运行的佣金任务
desc "This task changed the status of started jobs"
task :start_status => :environment do
jobs_to_be_started = Job.find_all_by_status("Started")
jobs_to_be_started do |job|
job.status = "Running"
job.saved
end
end
这是我收到的错误
Rake aborted! undefined method `jobs_to_be_started' for main:Object
有一个谷歌,看不到明显的答案,有人能指出我正确的方向吗?
答案 0 :(得分:1)
您可能错过了迭代器(例如each
)?
desc "This task changed the status of started jobs"
task :start_status => :environment do
jobs_to_be_started = Job.find_all_by_status("Started")
jobs_to_be_started.each do |job|
job.status = "Running"
job.save
end
end
而且你可能会在job.saved上出现错误,这是一个印刷错误吗?我建议你在这里使用update_attributes
,比如
jobs_to_be_started.each do |job|
job.update_attributes :status => "Running"
end
答案 1 :(得分:0)
示例中的以下代码是方法jobs_to_be_started
的调用:
jobs_to_be_started do |job|
job.status = "Running"
job.saved # If you don't define `saved` method yourself it should be `save`
end
对于始终在对象上调用的方法,并且未指定对象,jobs_to_be_started
上会调用self
。在您的情况下,self
是主Object
(代码ouside类/模块定义的上下文)。
主对象没有定义jobs_to_be_started
方法,这就是您收到此错误的原因。
从您的代码中我假设您希望在jobs_to_be_started
列表中调用每个作业,因此您很可能希望执行以下操作:
jobs_to_be_started.each do |job|
job.status = "Running"
job.saved
end
在这里,您可以调用each
对象的jobs_to_be_started
方法(并将此调用与块关联)。