耙子流产! main:Object的未定义方法`jobs_to_be_started'

时间:2012-01-27 13:13:58

标签: ruby-on-rails ruby rake

这是我试图运行的佣金任务

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

有一个谷歌,看不到明显的答案,有人能指出我正确的方向吗?

2 个答案:

答案 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方法(并将此调用与块关联)。