2012-01-27 9 views
0

これは私がレイクは中止! `jobs_to_be_started未定義のメソッド「メイン用:オブジェクト

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タスクであり、これは私が

Rake aborted! undefined method `jobs_to_be_started' for main:Object 

てきたが、グーグルを持っていたことができ受けていますエラーです」明白な答えを見て、誰かが正しい方向に私を向けることができますか?

答えて

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にエラーが発生しますが、誤植ということでしょうか?

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の呼び出しである

jobs_to_be_started.each do |job| 
    job.update_attributes :status => "Running" 
end 
+0

乾杯、ええ、私はイテレータに感謝しなかった! –

0

のように、ここでupdate_attributesを使用することをお勧めしますオブジェクトが指定されていない場合、selfjobs_to_be_startedが呼び出されます。あなたのケースでは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メソッドを呼び出します(とと、このコールを関連付けますブロック)のオブジェクトです。

関連する問題