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

  • 0
    いいね
  • 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