読者です 読者をやめる 読者になる 読者になる

好き勝手に・げーあにん?

ファミコンと同い年の社会人ヌルオタの日記

Railsチュートリアル(第3版)をやった

Ruby

railstutorial.jp


以前からやってみようとはおもいつつ時間がかかりそうだったので敬遠していたのだが、先週から仕事が急に暇になってしまったのでようやくやった。

1日4時間ずつぐらいやって6日もかかってしまった。だいぶ時間かかったなぁ。Herokuでメールをおくるための設定とAmazon S3を使わないといけないところは飛ばした。

この手のチュートリアルで面倒な環境構築が、クラウド環境(Cloud9)を使ってあっさり終わるのが良い。自分の環境も汚れないし。

Railsチュートリアルをやるだけで MVC も RESTful API も身についちゃうし、git も heroku も使えるようになっちゃう凄い!みたいな感想はきっといろんなところで言われてるので略。
実際すごい丁寧だし、いいチュートリアルですよね。学習コストが高いと言われてる理由も実感できてよかった。

以下、個人的な備忘。

詰まったところ

たまに Guard と rake test の結果が違うことがあってかなり戸惑った。
11.4.1まで進むと

システムによっては、ここで一旦Railsサーバーを再起動させる必要があります。再起動させたらテストスイートを走らせてみてください。成功しているはずです。(ただし、3.7.3で説明したGuardを使っている場合は、再起動させるだけではうまく動かないかもしれません。その場合はターミナルから一旦抜けて、新しいターミナルでGuardを再実行してみてください。)

というGuardでうまく行かないことがあるという表記が出てくるのだが、もっと早く教えて欲しかったな……。11章までたどり着く前に、3回ぐらい起こったと思う。

気になっていること

rails console でどんなSQLが実行されているのか確認しながらやってたんだが、11章

class User < ActiveRecord::Base
  has_many :microposts, dependent: :destroy
  .
  .
  .
end

has_many :microposts, dependent: :destroy を設定した状態で、 User#destroy を呼ぶと

(0.1ms) SAVEPOINT active_record_1
Micropost Load (0.2ms) SELECT "microposts".* FROM "microposts" WHERE "microposts"."user_id" = ? ORDER BY "microposts"."created_at" DESC "user_id", 102
SQL (0.2ms) DELETE FROM "microposts" WHERE "microposts"."id" = ? "id", 1
SQL (0.3ms) DELETE FROM "users" WHERE "users"."id" = ? "id", 102
(0.1ms) RELEASE SAVEPOINT active_record_1

上記のような SQL が実行されているのが気になっている。SELECTなしで、

DELETE FROM "microposts" WHERE "microposts"."user_id" = ? "id", 102
DELETE FROM "users" WHERE "users"."id" = ? "id", 102

だけにならないものか。SELECTを呼んでるのは百歩譲ってまぁ良いとしても、
default_scope -> { order(created_at: :desc) } が DELETE するときにも効いてしまっているのが残念感ある。どうにかならないものか。

Railsチュートリアルだけだとわからなかったが、よく使いそうなもの

  • エラーページ関連
    • 404 not found が出たときの処理やページをどうすればいいのか
  • HTTP status code だけ返したいときとか
  • メンテナンス中などで、一時的に一括で同じページに飛ばしたいとき
    • sinatra だと get('*'){ maintenance? ? erb(:maintenance) : pass } とかですぐでできちゃう奴

ちょっとググればすぐ出てくるけども。メンテ中表示とかはどうするのがいいのかは要検討か。


特にまとめとかなく終わり。