rakeタスク作成

rails g task update_task

→lib/tasks/update_task.rake作成

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で設定していることで使えるメソッド)

Rails enumについてまとめておく - Qiita

task.doing.past_limit_time_at

past_limit_time_atはモデルにスコープを設定している。

今より過去にlimit_timeが設定されているもののみを取得。

models/task.rb