【進捗】Ruby on Rails チュートリアル 第ニ章Toyアプリケーション 【自分用】

はじめに

前日の第一章のチュートリアルは深夜に及ぶ作業となり、第二章を進めるはずの本日は昼過ぎの起床となった。
飲み会があったのだがドタキャン入れてチュートリアルに専念することにした。

教材

チュートリアルのニ章やります。
railstutorial.jp

進捗

細かい内容は省略して、演習問題を載せることにしました。

・演習

CSSを知っている読者へ: 新しいユーザーを作成し、ブラウザのHTMLインスペクター機能を使って「User was successfully created.」の箇所を調べてみてください。ブラウザをリロードすると、その箇所はどうなるでしょうか?

CSSでgreen定義されていたスタイルを、blue定義に変更すると文字色が変わる。ブラウザの更新ボタンを押すとメッセージ表示が消える。

emailを入力せず、名前だけを入力しようとした場合、どうなるでしょうか?

→そのまま登録できてしまう。

「@example.com」のような間違ったメールアドレスを入力して更新しようとした場合、どうなるでしょうか?

→そのまま登録できてしまう。

全体感
f:id:rhutaba:20170503182846p:plain

上記の演習で作成したユーザーを削除してみてください。ユーザーを削除したとき、Railsはどんなメッセージを表示するでしょうか?

「Are you sure?」のメッセージボックスが表示され、了承するとユーザが削除される。
f:id:rhutaba:20170503183017p:plain



・演習

図 2.11を参考にしながら、/users/1/edit というURLにアクセスしたときの振る舞いについて図を書いてみてください。

→基本的には同じ流れなはず。
1.ブラウザから「GET /users/n/edit」というURLのリクエストをRailsサーバーに送信する。
2.「/users/n/edit」リクエストは、Railsのルーティング機構 (ルーター) によってUsersコントローラ内のeditアクションに割り当てられる
3.editアクションが実行され、そこからUserモデルに、「ユーザーnを取り出せ」と問い合わせる。
4.Userモデルは問い合わせを受け、ユーザーnをデータベースから取り出す。
5.データベースから取り出したユーザーnをUserモデルからコントローラに返す。
6.Usersコントローラは、ユーザーの一覧を@user変数に保存し、editビューに渡す。
7.editビューが起動し、「edit.html.erb」を実行、「_from.html.erb」を実行して HTMLを生成 (レンダリング) する。
8.コントローラは、ビューで生成されたHTMLを受け取り、ブラウザに返す

図示した振る舞いを見ながら、Scaffoldで生成されたコードの中でデータベースからユーザー情報を取得しているコードを探してみてください。

ログから取得したSELECT文がどこから発行されているのか不明。indexと同様ならApplicationRecordだと思うけど・・・。
SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT ? [["id", 5], ["LIMIT", 1]]

ここはどうしても分からなかったので、先人の回答例を見ました。飛ばして進めたけど、結局ここがわからないと先に進めなかったので。
private
# Use callbacks to share common setup or constraints between actions.
def set_user
@user = User.find(params[:id])
end

ユーザーの情報を編集するページのファイル名は何でしょうか?

→「edit.html.erb」



・演習

CSSを知っている読者へ: 新しいマイクロポストを作成し、ブラウザのHTMLインスペクター機能を使って「Micropost was successfully created.」の箇所を調べてみてください。ブラウザをリロードすると、その箇所はどうなるでしょうか?

CSSでgreen定義されていたスタイルを、blue定義に変更すると文字色が変わる。ブラウザの更新ボタンを押すとメッセージ表示が消える。

マイクロポストの作成画面で、ContentもUserも空にして作成しようとするどうなるでしょうか?

→作成できる。なお、二度全く同一のポストも受け付ける。

141文字以上の文字列をContentに入力した状態で、マイクロポストを作成しようとするとどうなるでしょうか? (ヒント: WikipediaRubyの記事にある1段落目がちょうど150文字程度ですが、どうなりますか?)

→すべての文字列が登録される。

上記の演習で作成したマイクロポストを削除してみましょう。

→削除可能。

f:id:rhutaba:20170503233521p:plain



・演習

先ほど2.3.1.1の演習でやったように、もう一度Contentに141文字以上を入力してみましょう。どのように振る舞いが変わったでしょうか?

f:id:rhutaba:20170503234222p:plain


CSSを知っている読者へ: ブラウザのHTMLインスペクター機能を使って、表示されたエラーメッセージを調べてみてください。

→「#error_explanation」のidを持つスタイルが出力されている。


・演習

ユーザーのshowページを編集し、ユーザーの最初のマイクロポストを表示してみましょう。同ファイル内の他のコードから文法を推測してみてください (コラム 1.1で紹介した技術の出番です)。うまく表示できたかどうか、/users/1 にアクセスして確認してみましょう。

→結局わからずにできなかった。他人の回答例を見てみたけどよくわからなかったので飛ばして進める。

リスト 2.16は、マイクロポストのContentが存在しているかどうかを検証するバリデーションです。マイクロポストが空でないことを検証できているかどうか、実際に試してみましょう (図 2.16のようになっていると成功です)。

→図の通りに表示された。

リスト 2.17のFILL_INとなっている箇所を書き換えて、Userモデルのnameとemailが存在していることを検証してみてください (図 2.17)。

→「:name」と「:email」に書き換えてみたけど検証の仕方がよくわからない。
 データの消し方が悪かったのか、データの整合が取れていない状態で制限を掛けてしまった模様。



・演習

Applicationコントローラのファイルを開き、ApplicationControllerがActionController::Baseを継承している部分のコードを探してみてください。

→「app/controllers/application_controller.rb」

ApplicationRecordがActiveRecord::Baseを継承しているコードはどこにあるでしょうか? 先ほどの演習を参考に、探してみてください。ヒント: コントローラと本質的には同じ仕組みなので、app/modelsディレクトリ内にあるファイルを調べてみると...?)

→「app/models/application_record.rb」


・演習

本番環境で2〜3人のユーザーを作成してみましょう。

→ユーザの作成はできた。ただし「New User」での登録後、完了ページが表示されない。トップページに戻ると「User was successfully created.」が表示される。何か誤操作してしまったか・・・。
f:id:rhutaba:20170504005119p:plain
f:id:rhutaba:20170504005145p:plain
f:id:rhutaba:20170504005208p:plain

本番環境で最初のユーザーのマイクロポストを作ってみましょう

→マイクロポストの作成に成功。
f:id:rhutaba:20170504005411p:plain
f:id:rhutaba:20170504005424p:plain
f:id:rhutaba:20170504005432p:plain

マイクロポストのContentに141文字以上を入力した状態で、マイクロポストを作成してみましょう。リスト 2.13で加えたバリデーションが本番環境でもうまく動くかどうか、確認してみてください。

→文字列が多すぎると怒られる。
f:id:rhutaba:20170504005513p:plain


最後にやってみた感想

これは有識者にアドバイスして貰いながらのほうが進捗や理解が進む気がする。ずぶの素人が一度で理解できるかというと難しい気がする。GW中に集中講座があったらしいが、最短でマスターするなら金銭を払って解説してもらったほうが良かったのかもしれない。できるところまでやったら二周目はセミナー参加して理解度を醸造した方がいいかもしれない。

当面は自力で進めてみて、どうしてもわからない所があれば先人の正解をちら見しながら進めていくようにしたい。