Railsチュートリアル第2章 演習問題 解答
- 1. 2.2.1 ユーザーページを探検する
- 1.1. 1.CSSを知っている読者へ: 新しいユーザーを作成し、ブラウザのHTMLインスペクター機能を使って「User was successfully created.」の箇所を調べてみてください。ブラウザをリロードすると、その箇所はどうなるでしょうか?
- 1.2. 2.emailを入力せず、名前だけを入力しようとした場合、どうなるでしょうか?
- 1.3. 3.「@example.com」のような間違ったメールアドレスを入力して更新しようとした場合、どうなるでしょうか?
- 1.4. 4.上記の演習で作成したユーザーを削除してみてください。ユーザーを削除したとき、Railsはどんなメッセージを表示するでしょうか?
- 2. 2.2.2 MVCの挙動
- 3. 2.3.1 マイクロポストを探検する
- 3.1. 1.CSSを知っている読者へ: 新しいマイクロポストを作成し、ブラウザのHTMLインスペクター機能を使って「Micropost was successfully created.」の箇所を調べてみてください。ブラウザをリロードすると、その箇所はどうなるでしょうか?
- 3.2. 2.マイクロポストの作成画面で、ContentもUserも空にして作成しようとするどうなるでしょうか?
- 3.3. 3. 141文字以上の文字列をContentに入力した状態で、マイクロポストを作成しようとするとどうなるでしょうか? (ヒント: WikipediaのRubyの記事にある1段落目がちょうど150文字程度ですが、どうなりますか?)
- 3.4. 4.上記の演習で作成したマイクロポストを削除してみましょう。
- 4. 2.3.2 マイクロポストをマイクロにする
- 5. 2.3.3 ユーザーはたくさんマイクロポストを持っている
- 5.1. 1.ユーザーのshowページを編集し、ユーザーの最初のマイクロポストを表示してみましょう。同ファイル内の他のコードから文法を推測してみてください (コラム 1.1で紹介した技術の出番です)。うまく表示できたかどうか、/users/1 にアクセスして確認してみましょう。
- 5.2. 2.リスト 2.16は、マイクロポストのContentが存在しているかどうかを検証するバリデーションです。マイクロポストが空でないことを検証できているかどうか、実際に試してみましょう (図 2.16のようになっていると成功です)。
- 5.3. 3.リスト 2.17のFILL_INとなっている箇所を書き換えて、Userモデルのnameとemailが存在していることを検証してみてください (図 2.17)。
- 6. 2.3.4 継承の階層
- 7. 2.3.5 アプリケーションをデプロイする
2.2.1 ユーザーページを探検する
1.CSSを知っている読者へ: 新しいユーザーを作成し、ブラウザのHTMLインスペクター機能を使って「User was successfully created.」の箇所を調べてみてください。ブラウザをリロードすると、その箇所はどうなるでしょうか?
解答
1:「User was successfully created.」の箇所
ユーザー登録後のshow画面のHTMLのbodyタグ直後
User was successfully created.
と書いてあります。
ちなみにHTMLインスペクター機能というのは検証機能というやつで
画面右クリックして「検証」をクリックしてもいいですが、
Windowsは「F12」、Macでは「Command + Option + I」で起動できます。
2:リロードするとどうなるか
リロードすると消えます。
Windowsだと「F5」、Macだと「Command + R」でリロードすることができます。
2.emailを入力せず、名前だけを入力しようとした場合、どうなるでしょうか?
解答
ユーザー登録ができます。(エラーが発生しない)
3.「@example.com」のような間違ったメールアドレスを入力して更新しようとした場合、どうなるでしょうか?
解答
ユーザー情報の更新ができます。(エラーが発生しない)
4.上記の演習で作成したユーザーを削除してみてください。ユーザーを削除したとき、Railsはどんなメッセージを表示するでしょうか?
解答
User was successfully destroyed.
と表示します。
2.2.2 MVCの挙動
1.図 2.11を参考にしながら、/users/1/edit というURLにアクセスしたときの振る舞いについて図を書いてみてください。
解答
こんな感じになります。
2.図示した振る舞いを見ながら、Scaffoldで生成されたコードの中でデータベースからユーザー情報を取得しているコードを探してみてください。
解答
app/controllers/users_controller.rbの
- 7行目:@users = User.all
- 67行目:@user = User.find(params[:id])
3.ユーザーの情報を編集するページのファイル名は何でしょうか?
解答
app/views/users/edit.html.erb
です。
2.3.1 マイクロポストを探検する
1.CSSを知っている読者へ: 新しいマイクロポストを作成し、ブラウザのHTMLインスペクター機能を使って「Micropost was successfully created.」の箇所を調べてみてください。ブラウザをリロードすると、その箇所はどうなるでしょうか?
解答
Userの時と同様なので省略。
2.マイクロポストの作成画面で、ContentもUserも空にして作成しようとするどうなるでしょうか?
解答
作成できます。両方とも空のままです。
3. 141文字以上の文字列をContentに入力した状態で、マイクロポストを作成しようとするとどうなるでしょうか? (ヒント: WikipediaのRubyの記事にある1段落目がちょうど150文字程度ですが、どうなりますか?)
解答
作成できます。
4.上記の演習で作成したマイクロポストを削除してみましょう。
解答
一覧画面の「Destroy」を押せば良いです。削除できます。
ここまでの演習はscaffoldでバリデーションは何一つ設定できていないので、
直感的にエラーになりそうなもの全部できちゃってるのは当たり前ではあるんですね。
2.3.2 マイクロポストをマイクロにする
1.先ほど2.3.1.1の演習でやったように、もう一度Contentに141文字以上を入力してみましょう。どのように振る舞いが変わったでしょうか?
解答
1 error prohibited this micropost from being saved:
Content is too long (maximum is 140 characters)
というエラーメッセージが表示されるようになります。
2.CSSを知っている読者へ: ブラウザのHTMLインスペクター機能を使って、表示されたエラーメッセージを調べてみてください。
解答
すごい抽象的な問題でこれでいいのか迷いどころですが
micropostの作成直後の画面のbodyタグ内に以下の記述があるのでこれを見つけられれば良いかと思います。
<div id="error_explanation"> <h2>1 error prohibited this micropost from being saved:</h2> <ul> <li>Content is too long (maximum is 140 characters)</li> </ul> </div>
2.3.3 ユーザーはたくさんマイクロポストを持っている
1.ユーザーのshowページを編集し、ユーザーの最初のマイクロポストを表示してみましょう。同ファイル内の他のコードから文法を推測してみてください (コラム 1.1で紹介した技術の出番です)。うまく表示できたかどうか、/users/1 にアクセスして確認してみましょう。
解答
user.html.erbに以下の記載を追加します。
最初の投稿を表示できれば良いので、contentを抽出することにしました。
本当は記事を作成してないユーザーであれば空で表示するなどする必要もあるのですが、
現時点ではこのレベルで良いかと思います。
<p> <strong>First Post:</strong> <%= @user.microposts.first.content %> </p>
2.リスト 2.16は、マイクロポストのContentが存在しているかどうかを検証するバリデーションです。マイクロポストが空でないことを検証できているかどうか、実際に試してみましょう (図 2.16のようになっていると成功です)。
解答
リスト2.16の通りに編集してあげれば大丈夫です。
class Micropost < ApplicationRecord belongs_to :user validates :content, length: { maximum: 140 }, presence: true end
3.リスト 2.17のFILL_INとなっている箇所を書き換えて、Userモデルのnameとemailが存在していることを検証してみてください (図 2.17)。
解答
リスト2.16を真似るようにvalidatesの後にカラムをそれぞれ指定してあげればOKです。
class User < ApplicationRecord has_many :microposts #list 2.17 validates :name,presence: true validates :email,presence: true end
2.3.4 継承の階層
1.Applicationコントローラのファイルを開き、ApplicationControllerがActionController::Baseを継承している部分のコードを探してみてください。
解答
app/controllers/application_controller.rbの一行目です。
2.ApplicationRecordがActiveRecord::Baseを継承しているコードはどこにあるでしょうか? 先ほどの演習を参考に、探してみてください。ヒント: コントローラと本質的には同じ仕組みなので、app/modelsディレクトリ内にあるファイルを調べてみると…?)
解答
app/models/application_record.rbの一行目です。
2.3.5 アプリケーションをデプロイする
1.本番環境で2〜3人のユーザーを作成してみましょう。
解答
ユーザー作るだけなので省略
2.本番環境で最初のユーザーのマイクロポストを作ってみましょう
解答
マイクロポスト作成するだけなので省略
3.マイクロポストのContentに141文字以上を入力した状態で、マイクロポストを作成してみましょう。リスト 2.13で加えたバリデーションが本番環境でもうまく動くかどうか、確認してみてください。
解答
141文字以上のContentを作成しようとしてエラーになれば良いです。