Рейк отменен!неопределенный метод `jobs_to_be_started 'для main: Object - PullRequest
0 голосов
/ 27 января 2012

Это грабли, которые я пытаюсь запустить

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 ]

1 голос
/ 27 января 2012

Возможно, вы пропустили итератор (например, 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
0 голосов
/ 27 января 2012

Следующий код из вашего примера является вызовом метода 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 (контекстом для определения класса / определения модуля).Главный объект не определяет метод 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...