LoginSignup
2
1

More than 5 years have passed since last update.

rake taskの処理本体は他のとこに書いたほうがよさげ

Last updated at Posted at 2016-11-04

例えば、現在より前のレッスンを削除する処理を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になる。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1