文系卒だけどいきなりRuby on Railsの勉強をはじめてみた #2 Toyアプリケーション

#第2章 Toyアプリケーション
この章ではscaffoldジェネレータというスクリプトを使うとのこと。
要は、これを使うと大量の機能を自動的に生成できるっぽい。

早速`bundle install`をしていく。エラーが出るがもう怖くない。
一回対処しているからね。

次にgitコマンドを打っていく。gitがなかなかに難しい。

とりあえず、
`git init`はリポジトリにつき1回実行すればOK
`git add -A`は指定ディレクトリの中のものをすべてgitにぶちこむ準備をする
`git commit -m`はメッセージつきでgitへの出荷準備をする
くらいの理解でいる。

リポジトリはとりあえずデータを格納できる場所、位の認識。

次に`scaffold`を使うことでモデルを実装できるっぽい。
データベースをマイグレーションしましょうと言われたが、なんのことかもなんのためにやるのかもわからない。

>マイグレーション機能をひと言で説明すると、「SQLを書くことなくRubyでデータベース内にテーブルを作成することができる機能」です。

とのことらしい。なんかやらないとだめっぽい。

進めていくと、また演習に。

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

>emailを入力せず、名前だけを入力しようとした場合、どうなるでしょうか?
「@example.com」のような間違ったメールアドレスを入力して更新しようとした場合、どうなるでしょうか?
>>どんな形式のemailを入力しようが、しまいが、ユーザーを作成できる。

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

MVCについての現段階の理解は、Modelはデータベースみたいなもので、Viewは実際の画面のことという認識。Controllerがよくわからない。ModelとViewの架け橋みたいなものだろうか。

ぐぐってみると、次のような解説があった。あながち間違っていなかったのかも。

>・モデル(Model)：表示や入力に関連しない処理を担当
・ビュー(View)：表示や入力に関する処理を担当
・コントローラ(Controller)：ビューとモデルの橋渡し役を担当

そして、users_controller.rbの中身をみていくとなにやらいろんなアクションがある。editやdestroyなどだ。これはURLに表示されていたものと同一なので、ユーザーの編集や削除はこのコントローラーが関わっていたのだろう。

ちなみに、RESTはREpresentational State Transferの略ということはわかったもののそれがなんなのかはさっぱりわからなかった。
見なかったことにして次に進む。

すると、演習に。

>図 2.11を参考にしながら、/users/1/edit というURLにアクセスしたときの振る舞いについて図を書いてみてください。
>>editアクションを呼び出すんだろうというところまではわかる。
これは答えをぐぐろう…。


>図示した振る舞いを見ながら、Scaffoldで生成されたコードの中でデータベースからユーザー情報を取得しているコードを探してみてください。
>>`route  resources :users`か…？（まったく外しており、本当は@user = User.find(params[:id])らしい。）

>ユーザーの情報を編集するページのファイル名は何でしょうか?
>>edit.html.erbか…？

次はマイクロポストリソースを作成するみたいだ。`rails generate scaffold Micropost content:text user_id:integer`でつくれるっぽい。よくわからんけど、便利だなあ。

で、また、`rails db:migrate`をする。
よくわからんけどやらないといけないやつ。

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

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

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

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

次に140文字制限をかけてみた。

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

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


次の演習。

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

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

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

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

>ApplicationRecordがActiveRecord::Baseを継承しているコードはどこにあるでしょうか? 先ほどの演習を参考に、探してみてください。ヒント: コントローラと本質的には同じ仕組みなので、app/modelsディレクトリ内にあるファイルを調べてみると...?)
>>ApplicationRecordって何のこと状態。よくわからないけど、`app/models/application_record.rb`の中に`class ApplicationRecord < ActiveRecord::Base`って書いてあるからこれだと思う。

#雑感
第二章では、ユーザー（Users）や投稿（Microposts）を作成した。
その中で、必須入力項目を実装したり、文字制限を加えたりした。
MVCの理解も少し深まった。気がする。