rails g task update_task
→lib/tasks/update_task.rake作成
taskのstateカラムにenumが設定してあり、「do」「doing」「done」「time_out」があるとする。
今回やることはdoingの設定になっているtaskで期限であるtime_out_atが過ぎていればtime_outに変更するrakeタスクを作成する。
構文についてはこんな感じ
task.doing.past_limit_time_at.find_each(&:time_out!)の部分についての解説
namespace :update_task do
desc 'taskが実行期限後になっていたら「時間切れ」に変更' #<=コメント
task change_state: :environment do #<=名前と環境
task.doing.past_limit_time_at.find_each(&:time_out!)
end
end
task.doing
taskの中でもdoingのものに絞る。(enumで設定していることで使えるメソッド)
task.doing.past_limit_time_at
past_limit_time_atはモデルにスコープを設定している。
今より過去にlimit_timeが設定されているもののみを取得。
models/task.rb