【问题标题】:Rake aborted! undefined method `jobs_to_be_started' for main:Object瑞克失败了! main:Object 的未定义方法“jobs_to_be_started”
【发布时间】:2012-01-27 13:13:58
【问题描述】:
这是我正在尝试运行的 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
已经用谷歌了,但看不到明显的答案,谁能指出我正确的方向?
【问题讨论】:
标签:
ruby-on-rails
ruby
rake
【解决方案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
【解决方案2】:
您示例中的以下代码是方法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(代码外部类/模块定义的上下文)。
Main Object 未定义 jobs_to_be_started 方法,这就是您收到此错误的原因。
根据您的代码,我假设您希望调用 jobs_to_be_started 列表中的每个作业,因此您很可能想要执行以下操作:
jobs_to_be_started.each do |job|
job.status = "Running"
job.saved
end
在这里调用jobs_to_be_started 对象的each 方法(并将此调用与块相关联)。