LoginSignup
43
44

More than 5 years have passed since last update.

RailsでRakeタスクの追加

Posted at

Railsで使っているDBに対するバッチ処理を行うのにrails runner 使ったりもしていたけど結局Rake使うのが一番捗ると今更気づいた今日このごろ。

サンプル

  • name,commentを持つMobというモデルを作成
  • それに100件のデータを追加
  • 奇数IDのみ表示
  • 全削除

作成 単なるScaffold

rails new SampleRake
cd SampleRake
rails g scaffold mob name comment
rake db:migrate

Rakeタスクの作成

rakeファイルの作成

rails g task mob_task add_100 show_odd remove_all

結果
create lib/tasks/mob_task.rake

lib/tasks/mob_task.rake
namespace :mob_task do
  desc "TODO"
  task :add_100 => :environment do
  end

  desc "TODO"
  task :show_odd => :environment do
  end

  desc "TODO"
  task :remove_all => :environment do
  end

end

100件追加タスクの作成と実行

add100
  task :add_100 => :environment do
+   100.times do |i|
+     mob = Mob.new
+     mob.name = "user_#{i}"
+     mob.comment = "sug" + "e" * i
+     mob.save
+   end
  end

実行
rake mob_task:add100

結果(localhost:3000/mobs)

Name Comment

user_0 sug Show Edit Destroy
user_1 suge Show Edit Destroy
user_2 sugee Show Edit Destroy
user_3 sugeee Show Edit Destroy
・・・・

奇数IDのみ出力

  task :show_odd => :environment do
+   Mob.all.each do |m|
+     p "id:#{m.id}, name:#{m.name}, comment:#{m.comment}" if m.id % 2 == 1
+   end
  end

実行
rake mob_task:show_odd

結果

"id:1, name:user_0, comment:sug"
"id:3, name:user_2, comment:sugee"
"id:5, name:user_4, comment:sugeeee"
"id:7, name:user_6, comment:sugeeeeee"
"id:9, name:user_8, comment:sugeeeeeeee"

全削除

  task :remove_all => :environment do
+   Mob.delete_all
  end

実行
rake mob_task:remove_all

結果
消えてます。


他にもいろいろできそうなので活用してみます。

43
44
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
43
44