例えば、現在より前のレッスンを削除する処理をrakeタスクで書きたいとき、
lib/tasks/delete_past.rake
namespace :delete_past do
desc '過去のlessonを削除する'
task lessons: :environment do
Lesson.where( 'finish_datetime < ?', Time.zone.now).delete_all
end
end
上のように、rakeに処理を書いていました。
しかし
lesson.rb
class Lesson < ActiveRecord::Base
def self.delete_past
where( 'finish_datetime < ?', Time.zone.now).delete_all
end
end
delete_past.rake
namespace :delete_past do
desc '過去のlessonを削除する'
task lessons: :environment do
Lesson.delete_past
end
end
このように(今回の場合は)モデルに処理を書いて、taskでは呼び出すだけにしたほうがよさげだと思った。
メリット
タスクが読みやすくなる。
テストがしやすい。
コードの場所が直感的に理解しやすくなる。
普通にwebアプリケーション上からも実行しやすい。
デメリット
モデルがfatになる。