演習と回答
2.2.1 ユーザーページを探検する
2.2.1 - 1
CSSを知っている読者へ: 新しいユーザーを作成し、ブラウザのHTMLインスペクター機能を使って「User was successfully created.」の箇所を調べてみてください。ブラウザをリロードすると、その箇所はどうなるでしょうか?
<p id="notice">User was successfully created.</p>
リロード前は上のようになっていて
<p id="notice"></p>
リロードしたあとはUser was successfully created.
が消えて空白になっていた。
2.2.1 - 2
emailを入力せず、名前だけを入力しようとした場合、どうなるでしょうか?
名前だけでも登録ができる。
2.2.1 - 3
「@example.com」のような間違ったメールアドレスを入力して更新しようとした場合、どうなるでしょうか?
更新できる。
2.2.1 - 4
上記の演習で作成したユーザーを削除してみてください。ユーザーを削除したとき、Railsはどんなメッセージを表示するでしょうか?
User Destroy (1.1ms) DELETE FROM "users" WHERE "users"."id" = ? [["id", 3]]
などと表示される。
2.2.2 MVCの挙動
2.2.2 - 1
図 2.11を参考にしながら、/users/1/edit というURLにアクセスしたときの振る舞いについて図を書いてみてください。
割愛。
2.2.2 - 2
図示した振る舞いを見ながら、Scaffoldで生成されたコードの中でデータベースからユーザー情報を取得しているコードを探してみてください。Hint: set_userという特殊な場所の中にあります。
private
# Use callbacks to share common setup or constraints between actions.
def set_user
@user = User.find(params[:id])
end
2.2.2 - 3
ユーザーの情報を編集するページのファイル名は何でしょうか?
edit.html.erb
2.3.1 マイクロポストを探検する
2.3.1 - 1
CSSを知っている読者へ: 新しいマイクロポストを作成し、ブラウザのHTMLインスペクター機能を使って「Micropost was successfully created.」の箇所を調べてみてください。ブラウザをリロードすると、その箇所はどうなるでしょうか?
<p id="notice">Micropost was successfully created.</p>
リロード前は上のようになっていて
<p id="notice"></p>
リロードしたあとはMicropost was successfully created.が消えて空白になっていた。
2.3.1 - 2
マイクロポストの作成画面で、ContentもUserも空にして作成しようとするどうなるでしょうか?
作成できる。
2.3.1 - 3
141文字以上の文字列をContentに入力した状態で、マイクロポストを作成しようとするとどうなるでしょうか?(ヒント: WikipediaのRubyの記事にある設計思想の引用文が140文字を超えているので、これをコピペしてみましょう)
作成できる。
2.3.1 - 4
上記の演習で作成したマイクロポストを削除してみましょう。
それぞれ削除しました。
2.3.2 マイクロポストをマイクロにする
2.3.2 - 1
先ほど2.3.1.1の演習でやったように、もう一度Contentに141文字以上を入力してみましょう。どのように振る舞いが変わったでしょうか?
作成できず、エラーメッセージが出るようになった。
2.3.2 - 2
CSSを知っている読者へ: ブラウザのHTMLインスペクター機能を使って、表示されたエラーメッセージを調べてみてください。
<textarea name="micropost[content]" id="micropost_content">Ruby には Perl や Python とは決定的に違う点があり、それこそが Ruby の存在価値なのです。それは「楽しさ」です。私の知る限り、Ruby ほど「楽しさ」について焦点を当てている言語は他にありません。Ruby は純粋に楽しみのために設計され、言語を作る人、使う人、学ぶ人すべてが楽しめることを目的としています。しかし、ただ単に楽しいだけではありません。Ruby は実用性も十分です。実用性がなければ楽しめないではありませんか。
— まつもとゆきひろ、Ruby プログラミング入門 まえがき 監修者よりのページ</textarea>
2.3.3 ユーザーはたくさんマイクロポストを持っている
2.3.3 - 1
ユーザーのshowページを編集し、ユーザーの最初のマイクロポストを表示してみましょう。同ファイル内の他のコードから文法を推測してみてください(コラム 1.2で紹介した技術の出番です)。うまく表示できたかどうか、/users/1 にアクセスして確認してみましょう。
first_user.microposts
Micropost Load (0.1ms) SELECT "microposts".* FROM "microposts" WHERE "microposts"."user_id" = ? LIMIT ? [["user_id", 1], ["LIMIT", 11]]
=> #<ActiveRecord::Associations::CollectionProxy [#<Micropost id: 7, content: "hi!", user_id: 1, created_at: "2021-01-23 06:05:27", updated_at: "2021-01-23 06:05:27">]>
2.6.3 :006 >
2.3.3 - 2
リスト 2.18は、マイクロポストのContentが存在しているかどうかを検証するバリデーションです。マイクロポストが空でないことを検証できているかどうか、実際に試してみましょう(図 2.17のようになっていると成功です)。
できたので割愛。
2.3.3 - 3
リスト 2.19のFILL_INとなっている箇所を書き換えて、Userモデルのnameとemailが存在していることを検証してみてください(図 2.18)。
class User < ApplicationRecord
has_many :microposts
validates :name, presence: true
validates :email, presence: true
end
2.3.4 継承の階層
2.3.4 - 1
Applicationコントローラのファイルを開き、ApplicationControllerがActionController::Baseを継承している部分のコードを探してみてください。
class ApplicationController < ActionController::Base #この行
def hello
render html: "hello, world"
end
end
2.3.4 - 2
ApplicationRecordがActiveRecord::Baseを継承しているコードはどこにあるでしょうか? 先ほどの演習を参考に、探してみてください。ヒント: コントローラと本質的には同じ仕組みなので、app/modelsディレクトリ内にあるファイルを調べてみると...?)
class ApplicationRecord < ActiveRecord::Base
self.abstract_class = true
end
2.3.5 アプリケーションをデプロイする
2.3.5 - 1
本番環境で2〜3人のユーザーを作成してみましょう。
作成できました。
2.3.5 - 2
本番環境で最初のユーザーのマイクロポストを作ってみましょう
作れました。
2.3.5 - 3
マイクロポストのContentに141文字以上を入力した状態で、マイクロポストを作成してみましょう。リスト 2.14で加えたバリデーションが本番環境でもうまく動くかどうか、確認してみてください。
うまく動きました。
さいごに
Railsチュートリアル第2章をクリアしました!
エラーに遭遇しましたが、きちんと文章を読む、検索する、めげない、で解決へたどり着けました。これからもっと難しくおもしろくなってくるようで、楽しみです。
- MVCモデルを知った
- RESTアーキテクチャを知った
- データモデルを作成した
- Twitterっぽい何かを作ることができた
- エラーに遭遇しても検索して解決へたどり着けた