Ruby on Rails チュートリアル 5.0(第4版) 第2章 演習と解答まとめ

Ruby on Rails チュートリアル 5.0(第4版)を学習中です。
演習問題を自分なりに実施しました。
もし間違い等あればコメントいただけると嬉しいです。

演習2.2.1

演習2.2.1.1

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

<解答>
表示が消える

演習2.2.1.2

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

<解答>
エラーなく、登録成功してしまう "User was successfully created."

演習2.2.1.3

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

<解答>
エラーなく、登録成功してしまう "User was successfully created."

演習2.2.1.4

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

<解答>
"User was successfully destroyed."

演習2.2.2

演習2.2.2.1

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

<解答>
演習2.2.2.1.png

演習2.2.2.2

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

<解答>
以下の"@user = User.find(params[:id])"

users_controller.rb
class UsersController < ApplicationController
(中略)
  private
    # Use callbacks to share common setup or constraints between actions.
    def set_user
      @user = User.find(params[:id])
    end
end

演習2.2.2.3

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

<解答>
"users/edit.html.erb"

演習2.3.1

演習2.3.1.1

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

<解答>
表示が消える

演習2.3.1.2

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

<解答>
エラーなく、登録成功してしまう "User was successfully created."

演習2.3.1.3

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

<解答>
エラーなく、登録成功してしまう "User was successfully created."

演習2.3.1.4

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

<解答>
"Micropost was successfully destroyed."

演習2.3.2

演習2.3.2.1

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

<解答>
エラー表示

FireShot Capture 629 - ToyApp - https___morning-earth-60030.herokuapp.com_microposts.png

演習2.3.2.2

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

<解答>
省略

演習2.3.3

演習2.3.3.1

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

<解答>
"@micropost = Micropost.find(params[:id])"を追加。

users_controller.rb
class UsersController < ApplicationController
(中略)
  private
    # Use callbacks to share common setup or constraints between actions.
    def set_user
      @user = User.find(params[:id])
      @micropost = Micropost.find(params[:id])
    end
end

"<%= @micropost.content %>"を追加

users_show.html.erb
(前略)
<p>
  <strong>Content:</strong>
  <%= @micropost.content %>
</p>
(後略)

演習2.3.3.2

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

<解答>
リスト 2.16参照。

演習2.3.3.3

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

<解答>

app/models/user.rb
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を継承している部分のコードを探してみてください。

<解答>
下記の一番上のコードです。

application_controller.rb
class ApplicationController < ActionController::Base
(後略)

演習2.3.4.2

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

<解答>
下記の一番上のコードです。

app/models/application_record.rb
class ApplicationRecord < ActiveRecord::Base
(後略)

演習2.3.5

演習2.3.5.1

<問題>
①本番環境で2〜3人のユーザーを作成してみましょう。
②本番環境で最初のユーザーのマイクロポストを作ってみましょう
③マイクロポストのContentに141文字以上を入力した状態で、マイクロポストを作成してみましょう。リスト 2.13で加えたバリデーションが本番環境でもうまく動くかどうか、確認してみてください

<解答>
問題文の通り実行し、動作確認のみなので省略。

関連記事

Ruby on Rails チュートリアル 完全攻略 概要と演習解答総まとめ
http://mochikichi.hatenablog.com/entry/rails_tutorial_guide