【问题标题】: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 方法(并将此调用与块相关联)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-05-05
        • 1970-01-01
        • 1970-01-01
        • 2011-10-07
        • 2014-09-23
        • 2015-01-23
        • 2023-03-11
        • 1970-01-01
        相关资源
        最近更新 更多