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

コンパイラかく語りき

文系新卒プログラマーのメモ

RubyonRailsチュートリアル7章

Rails

どうも!chuckです。

いよいよ今回から動的ページの作成に入ります。今回作るのはユーザーのシンプルなプロフィールページですが、学ぶことがたくさんありました。

 

7章 ユーザー登録

7−1ユーザーページの作成

デバッグ表示

ビューに以下のコードを埋め込むことで、デバッグに有効な表示が得られます。

f:id:chuck0523:20150628103616p:plain

 

Rails serverを立ち上げてビューを表示すると、以下のように。

f:id:chuck0523:20150628103735p:plain

描画されるページの状態を把握するのにGoodです。

 

Railsの3つの環境

今までも出てきたけど、改めてまとめ。

Railsには開発、テスト、本番の3つの環境がある。Railsオブジェクトのenvを実行すると、どの環境にいるのか返してくれる。

 

Restアーキテクチャ

作成、表示、更新、削除が可能なリソースとしてデータを扱うこと。

ちなみにHTTPで言うところのPOST,GET,PATCH,DELETE。

id=1のユーザを表示することはuser/1をGETリクエストすること。これはRailsではshowアクションとして実行できる。なるほど!

 

ルーティング(config/route.rbの書き換え)

上記のリクエストを可能にするにはroute.rbに1行追加する必要がある。

f:id:chuck0523:20150628105152p:plain

2行目のresources :usersを追加することで以下のルーティングが可能となる。

 

f:id:chuck0523:20150628105251p:plain

 

showアクション

ルーティングの準備ができたので、showアクションを実装する。とは言え、以下の記述を追加するだけ。

f:id:chuck0523:20150628105752p:plain

一方でこちらがビュー(仮)

f:id:chuck0523:20150628105857p:plain

@userインスタンス変数を渡している。(たぶん)

 

デバッグ表示でもきちんとIDが渡ってきていることが分かる。

 

ファクトリー

ユーザーのモデルオブジェクトを作成する。データ・ソースを自動生成してくれる?(ここらへんは理解が浅い)

そしてfactory girlが便利。ここではactive recordよりも適材らしい。※factory girlはRubyGemなのでGemfileを改変してbundle installする。

 

f:id:chuck0523:20150628111428p:plain

 

Gravater

プロフィール画像の設定がカンタンにできちゃうツール。gravaterヘルパーメソッドを呼び出して使う。(ヘルパーはたしか便利なカスタム関数って感じだったかな)

f:id:chuck0523:20150628112614p:plain

 

もちろんヘルパーは自分で書く。

f:id:chuck0523:20150628112901p:plain

麻薬っぽい名前のMD5というのは暗号化に必要なもの。hexdigestとdowncaseで16進数の小文字に変換している。

 

ちゃんと画像が表示されてる!

f:id:chuck0523:20150628113103p:plain

 

7−2 登録フォームを作る

まずデータをリセットする。全消しは以下のコマンドが有効。

f:id:chuck0523:20150628113623p:plain

 

システムによってはprepareが必要なこともある。

f:id:chuck0523:20150628113902p:plain

 

小話

その昔テストはかなり苦痛なものだったらしい。全部を手動で行う必要があり、システムに変更があるたびに同じテストを実施しなければならなかったとか。(想像しただけでもめんどくさい…)

それを自動でやってくれるRSpecとかCapybaraってスゴいよね!(というありがたいお話がチュートリアルの途中に書いてあったので書いておきます)

 

テスト

というわけで以下、テスト関連の項目。

  • click_button ボタンを押してページ遷移をシミュレーションできる
  • fill_in フォーム送信に際してPOSTの内容というかInputタグの中身を埋めてくれる
  • expect 読んで字の如く。to,not_toで期待する内容を書く。trueになればテストが成功する

ユーザが無効のテスト

f:id:chuck0523:20150628115600p:plain

有効のテスト

f:id:chuck0523:20150628115625p:plain

ただし今のままではテストは失敗する。

 

ビューの作成

form_forヘルパーメソッドを利用する。

f:id:chuck0523:20150628120416p:plain

ここでのfはformのこと。HTMLのインプット要素に対応する何かが呼ばれる。

 

もちろん、これを実行するにはActionで追記が必要。

f:id:chuck0523:20150628120830p:plain

こうすることでHTML側にデータが渡る。らしい。

 

そして生成されたFormタグがこちら。

f:id:chuck0523:20150628121500p:plain

 

フォーム送信の仕組みをもっと詳しく

先ほどのHTMLにて、他のInputタグは以下のとおり。

f:id:chuck0523:20150628122148p:plain

name属性の中身はuserハッシュのemail属性を指定している!

 

user_params

外部メソッド。コントローラ内だけで処理されるので安全、らしい。またprivateを指定しておく。

 

errors.full_messages

エラーメッセージを取得できる。

f:id:chuck0523:20150628123009p:plain

 

これをHTML側で実装するとこうなる。

 

f:id:chuck0523:20150628123157p:plain

shared/は慣習的なディレクトリであり、その中のerror_messagesというパーシャルを利用している。

つまりそれも自作する必要がある。

 

any?メソッド

emptyの逆で、1つ以上心当たりがあればTrueを返す。

 

puluralizeメソッド

英単語を場面に応じて複数形に変換してくれる。しかも不規則変化の単語まで。えっ、すごくない?

f:id:chuck0523:20150628123659p:plain

 

Redirect

ユーザーの登録が終わった後に、ユーザーページに飛ばす必要がある。

そのための記述が「redirect_to @user」

 

flash

1度だけ表示を行う特殊な変数。

 

SSLを有効にする

config/environments/production.rbの以下をコメントアウトする。

f:id:chuck0523:20150628125422p:plain

このように。

f:id:chuck0523:20150628125438p:plain

 

 

以上で7章は終わり。ユーザー登録機能はもちろんのこと、テストやRailsの機能についてより詳しく学ぶことできた。

次回は第8章、サインイン・サインアウト。

 

では(`・ω・´)ゞ