Ruby on Rails チュートリアル やってみてる ~7章~
どうも。バレンタインはいかがお過ごしでしたでしょうか。僕は奥さんにチョコをもらいましたが全部食べられてしまいました。
さて、今回は7章です。6章でユーザーのモデルを作成したので、今回はそこにデータを突っ込んでいくためのユーザー登録機能やその情報を見る部分の実装ですね。
前回は目に見えないところの実装だったのでしんどくもあったんですが、今回は表側が主なスコープになっています。
この章は楽しかった。はい。そしてRails超便利。すげえ。
期間としては3日間くらいでした。いつも1日2~4時間くらい進めてますんでまあそのくらいです。
今回は最後の最後で超辛い事件が起きたのですがそれはまた後ほど・・・
では7章のまとめいってみよう!やってみよう!
7章の概要
6章ではユーザーの情報を保存するモデルを作ったので、ユーザーの情報を登録して表示する機能を作っていきます。
ブラウザにデバック情報を表示させる技もサラっと出てきます。
5章でレイアウトを作成した時にも出てきたRails特有の記法で共通部分は1つのファイルに書いて該当箇所に適応できたり、ユーザーの情報を引っ張って表示できるようにしていったりします。
テストを書きながらユーザーのプロフィール画面、ユーザー登録画面をグイグイ作っていきます。
ユーザー登録画面ではバリデーションに引っかかれば正しいエラーメッセージを表示させたりもします。登録完了時だけウェルカムメッセージを表示させるflash機能が出てきたり。とにかくRailsの機能でめっちゃ簡単に作れちゃう。
最後にSSLを導入して本番に反映させます。ユーザー情報を扱うならSSLがないとねってことかな。herokuのSSLを使うのでお金は掛かりません。
といったところが7章をサラッとまとめた感じでしょうか。しつこいけど本当に楽しかったです。
ハマったところ
has_secure_passwordがなんかしてやがる...
上からグアーっと実装していくと途中で本当ならエラーが出ないはずのところでエラーが出てしまう。こういうエラー。
ActiveRecord::UnknownAttributeError:
unknown attribute: password
原因が全然わかんないからgitで章の最初に戻して最初からやってみる。。。直近の状態に戻すコマンドはこれ。
git checkout .
でもまたエラーが起こるようになる。。。passwordが何なんだよ。。。
で、なんとなく6章の演習で追加した app/models/user.rb の以下の1行をコメントアウトしてみた。
# has_secure_password
そしたらなんかエラー出なくなった!知らんけど!まあいいや!
解決したかに見えたんだけど、またグイグイ進んでいくと同じエラーが出るようになった。。。
じゃあ今度はコメントアウト外してみよっかなと試したら無事エラーが出なくなった!
最初にこのエラーが出た時になぜエラーになってしまっていたのかが謎で仕方なかったんですが、とりあえず同じような状態に陥ってしまったらhas_secure_passwordをゴニョゴニョしてみてください。
gitをよくわかってなかった...
あーやっと終わったーと本番に反映している時に何かをやってしまった。何をやったかはわからない。とにかく嫌な予感がしたのでローカル環境のユーザー登録画面を見てみたら真っさら。何にもない・・・。
「でもまあgitで何とかなるんでしょう?」なんて余裕こいてググりながら適当にグチャグチャやっていたらもうワケがわからないことになって来てしまい。。そもそもgitってバージョンが管理できる何かなんでしょう?程度の認識しかなかった。。。
githubを直接見に行っても6日前のcommit(?)しかない。。。何これ。。。
というわけで、なんと、最後まで終わって本番反映すれば終わりというところですべて一からやり直しとなりました。さすがに全部コピペしましたがけどね。結構落ち込みました。
その後、ちゃんと最後までできたことを確認し、改めてgithubの項を読み返しました。
なるほど、たしかにpushなんて最近した記憶がなかったな。。。
皆さんはこまめにpushして僕みたいなことにならないようにしてくださいね。
演習
この章の演習はすべてコードが書いてあるのでタイポらなければすんなりいきます。ヒョイヒョイっと終わらせましょう。
感想など
というわけで、最後の最後でまさかのふりだしに戻るという悲しい事件が起きたわけですが、何とか7章を終えることができました。
gitまじ調べよ。調べよgit。
あと、かなり悩まされた has_secure_password なのですが、これ超すごいやつで、これを1行書くだけでパスワードとその再確認の内容が一致しているかという評価をしてくれる子なのです。
あとちょっと関係ないかもだけど、ディレクトリに新しいフォルダを作る時にFinderで「新しいフォルダを作成」とかやって作ってる人いたらアレなので、ターミナルでフォルダを作るコマンド書いときます。
mkdir ディレクトリ/フォルダ名
んで、ここにファイル作るならターミナルに
subl ディレクトリ/ファイル名
ってやればエディタでそのファイル名で開いてくれるので保存すればファイルが作られます。↑はsublime textの場合のコマンドなので違うエディタ使ってる人はそれぞれに対応したコメンド入れてください。
はい、とりあえず今回はこんな感じですかね。
次回の第8章は サインイン、サインアウト だそうです。
認証系は少し難しそうな気もしますが興味もかなりあるので楽しみだ。
では、また~。
Ruby on Rails チュートリアル やってみてるシリーズ:
赤い公園最高。