rake task: неопределенный метод для класса

Я добавил новую задачу в свой RakeFile (я знаю, что новый способ сделать это — добавить вашу задачу в lib/tasks, но другие задачи находятся в RakeFile, и я пока не хочу проводить рефакторинг). Задача, которую я добавил обращается к модели (возможно, нет, поскольку имя модели не указано в ошибке), но не получает доступ к ее методу.

rake aborted!
undefined method `transcode' for #<Class:0x10700e878>

Моя задача в RakeFile довольно проста;

namespace :casta do
  desc "Transcode user videos from S3"
  task :transcode => :environment do
    ProfileVideo.transcode
  end
end

И моя модель настолько проста, насколько это возможно;

class ProfileVideo < ActiveRecord::Base

  belongs_to :application_form

  def transcode
    puts "Transcoding"
  end

end

В других моих задачах RakeFile используется скрипт/раннер, и они прекрасно работают.

rails 2.3.14
rake 0.8.7 (у меня была версия 0.9.2, но я понизил версию до тестовой)

Хотелось бы немного понимания, спасибо.


person Christian    schedule 14.01.2013    source источник


Ответы (1)


Вы вызываете транскодирование как метод класса, поэтому измените метод транскодирования на:

  def self.transcode
    puts "Transcoding"
  end

Или, что более вероятно, то, что вы хотите: вы можете создать экземпляр ProfileVideo и вызвать для него транскодирование, а метод транскодирования оставить как есть:

  task :transcode => :environment do
    pv = ProfileVideo.new(attributes)
    pv.transcode
  end
person 99miles    schedule 14.01.2013
comment
Стреляет и забивает! Идеально! Большое спасибо! - person Christian; 15.01.2013
comment
О, мне очень нравится второй вариант на самом деле, идеальный. - person Christian; 15.01.2013