なんで誰もrails destroyを教えてくれなかったんだ #rails

あけましておめでとうございます。年末年始の休みを利用してRailsで遊んでおります。
そんななか地味に便利なRailsコマンドを見つけたのでメモ。

$ rails destroy

rails generateって便利ですよね。モデルやらコントローラやら何やらかんやらひな形を作ってくれる便利コマンドです。例えばユーザのひな形を作りたいなんていったら以下のコマンドで一発です。

$ rails generate scaffold user name:text age:integer
      invoke  active_record
      create    db/migrate/20130104071427_create_users.rb
      create    app/models/user.rb
      invoke    test_unit
      create      test/unit/user_test.rb
      create      test/fixtures/users.yml
      invoke  resource_route
       route    resources :users
      invoke  scaffold_controller
      create    app/controllers/users_controller.rb
      invoke    erb
      create      app/views/users
      create      app/views/users/index.html.erb
      create      app/views/users/edit.html.erb
      create      app/views/users/show.html.erb
      create      app/views/users/new.html.erb
      create      app/views/users/_form.html.erb
      invoke    test_unit
      create      test/functional/users_controller_test.rb
      invoke    helper
      create      app/helpers/users_helper.rb
      invoke      test_unit
      create        test/unit/helpers/users_helper_test.rb
      invoke  assets
      invoke    coffee
      create      app/assets/javascripts/users.js.coffee
      invoke    scss
      create      app/assets/stylesheets/users.css.scss
      invoke  scss
   identical    app/assets/stylesheets/scaffolds.css.scss

git statusをみると沢山のファイルが増えたことが確認できます。config/routes.rbまで編集してくれてますね。賢い!

$ git status
# On branch master
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified:   config/routes.rb
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       app/assets/javascripts/users.js.coffee
#       app/assets/stylesheets/users.css.scss
#       app/controllers/users_controller.rb
#       app/helpers/users_helper.rb
#       app/models/user.rb
#       app/views/users/
#       db/migrate/20130104072447_create_users.rb
#       test/fixtures/users.yml
#       test/functional/users_controller_test.rb
#       test/unit/helpers/users_helper_test.rb
#       test/unit/user_test.rb
no changes added to commit (use "git add" and/or "git commit -a")

こんなに沢山のファイルをコマンド1発で作ってくれるとかrails△とか言ってたら間違いに気づく訳ですよ。「あかんnameはtextやなくてstringや」と。
この間違いに気づいたとき、今までの僕はファイルを一つ一つ消していってました。作るのは簡単なのに取り消すのがめんどくさいってどういうことやねん。
ところが、これらのファイルをコマンド1発で消してくれるコマンドがあったんです。マジ、rails△。以下のコマンドで1発です。

$ rails destroy scaffold user
      invoke  active_record
      remove    db/migrate/20130104071427_create_users.rb
      remove    app/models/user.rb
      invoke    test_unit
      remove      test/unit/user_test.rb
      remove      test/fixtures/users.yml
      invoke  resource_route
       route    resources :users
      invoke  scaffold_controller
      remove    app/controllers/users_controller.rb
      invoke    erb
      remove      app/views/users
      remove      app/views/users/index.html.erb
      remove      app/views/users/edit.html.erb
      remove      app/views/users/show.html.erb
      remove      app/views/users/new.html.erb
      remove      app/views/users/_form.html.erb
      invoke    test_unit
      remove      test/functional/users_controller_test.rb
      invoke    helper
      remove      app/helpers/users_helper.rb
      invoke      test_unit
      remove        test/unit/helpers/users_helper_test.rb
      invoke  assets
      invoke    coffee
      remove      app/assets/javascripts/users.js.coffee
      invoke    scss
      remove      app/assets/stylesheets/users.css.scss
      invoke  scss

めっちゃ消えた!git statusをみるとちゃんとconfig/routes.rbも元通りです。

$ git status
# On branch master
nothing to commit, working directory clean

うむ。すっきり。

まとめ

generateしたものをdestroyする準備はできているからこれからも怖がらずにgenerateしまくろうね!ってことで。