首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Rake中止!main:Object的未定义方法`jobs_to_be_started

Rake中止!main:Object的未定义方法`jobs_to_be_started
EN

Stack Overflow用户
提问于 2012-01-27 21:13:58
回答 2查看 925关注 0票数 0

这是我正在尝试运行的rake任务

代码语言:javascript
运行
复制
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

这是我收到的错误

代码语言:javascript
运行
复制
Rake aborted! undefined method `jobs_to_be_started' for main:Object

我用过谷歌,看不到明显的答案,有谁能给我指个方向吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-01-27 21:24:10

您可能遗漏了一个迭代器(例如each)?

代码语言:javascript
运行
复制
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,比如

代码语言:javascript
运行
复制
jobs_to_be_started.each do |job|
  job.update_attributes :status => "Running"
end
票数 1
EN

Stack Overflow用户

发布于 2012-01-27 21:27:19

示例中的以下代码是对方法jobs_to_be_started的调用:

代码语言:javascript
运行
复制
jobs_to_be_started do |job|
  job.status = "Running"     
  job.saved # If you don't define `saved` method yourself it should be `save`
end

只要方法总是在对象上调用,并且您没有指定对象,那么就在self上调用jobs_to_be_started。在本例中,self是主Object (代码外部类/模块定义的上下文)。

Main对象没有定义jobs_to_be_started方法,这就是你得到这个错误的原因。

从您的代码中,我假设您希望调用jobs_to_be_started列表中的每个作业,因此您很可能希望这样做:

代码语言:javascript
运行
复制
jobs_to_be_started.each do |job|
  job.status = "Running"     
  job.saved
end

这里调用jobs_to_be_started对象的each方法(并将此调用与块相关联)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9033759

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档