新米パパの育児留学

新米パパの育児留学

未経験からエンジニアへの転職体験談など "リアル" な情報を発信

IT/WEBエンジニアの転職(未経験/30代可あり)エージェント, サービス比較(p.s.侍の炎上を見て)
全くの未経験からIT/Webエンジニアに転職した私(30代)のロードマップ
30代未経験からIT / Webエンジニアへのリアルな転職体験談4 ”2度目の転職活動から入社へ”
本当に使えるものだけ!出産準備品・ベビー用品で実際に買ってよかったおすすめ10選
クロスバイク  LIG(リグ) MOVE 700Cの組み立て手順まとめ
Ruby初心者におすすめの学習方法「プロを目指す人のためのRuby入門」
Ruby on Rails チュートリアル 完全攻略 概要と演習解答総まとめ

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

Ruby on Rails Tutorial最新版の演習と解答です。

GEEKLYのIT・WEB・ソーシャルゲーム業界への転職支援サービス

目的

Ruby on Rails チュートリアル 5.0(第4版)を学習中です。

学習を進める中で演習問題の解答がなかった(*1,2)ので、自分なりにまとめていくこととしました。

アウトプットし、自分の理解を深めることを目的としています。 もし、記載内容に誤りがあった場合はコメントいただけると幸いです。

(*1)著者による有償版の解答はあるようです。正式な解答をご希望の方はこちらを参照ください。

Learn Web Development with Rails: Michael Hartl's Ruby on Rails Tutorial | Softcover.io

(*2)旧版に関する解答はありましたが、最新版 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にアクセスしたときの振る舞いについて図を書いてみてください。

<解答>

f:id:mochikichi321:20170207160112p:plain

演習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文字以上を入力してみましょう。どのように振る舞いが変わったでしょうか?

<解答>

エラー表示

f:id:mochikichi321:20170207160408p:plain

演習2.3.2.2

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

<解答>

'error_explanation'というidが追加されている

演習2.3.3

演習2.3.3.1

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

<解答>

"<%= @user.microposts.first.content %>"を追加

[users_show.html.erb]

(前略)
<p>
  <strong>Content:</strong>
  <%= @user.microposts.first.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~3

<問題>

①本番環境で2〜3人のユーザーを作成してみましょう。

②本番環境で最初のユーザーのマイクロポストを作ってみましょう

③マイクロポストのContentに141文字以上を入力した状態で、マイクロポストを作成してみましょう。リスト 2.13で加えたバリデーションが本番環境でもうまく動くかどうか、確認してみてください

<解答>

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

GEEKLYのIT・WEB・ソーシャルゲーム業界への転職支援サービス

あわせて読みたい記事

mochikichi.hatenablog.com

mochikichi.hatenablog.com

mochikichi.hatenablog.com

おすすめの本

この本は、初心者にもわかりやすいとエンジニア界隈ではかなり著名な"伊藤 淳一"さんの本です。 私もいつもQiitaやブログでお世話になっており、わかりやすい解説に信頼を寄せていたので購入しました。

期待通り、いや、期待以上にわかりやすく丁寧な解説でしたのでかなり理解が深まったと思います。 私は参考書を読むのは退屈で頭に入ってこないタイプなのですが、わかりやすい解説に加えて実際に手を動かして理解を深められる例題が用意されているので楽しくサクサク進めていけます。

Rubyの基礎はProgateやドットインストールなどで理解した上で読まれると更に理解が深まると思います。 RailsスキルをレベルアップしていくためにもRubyの理解を深めることは非常に効果的です。 Railsチュートリアルを完了した方や、進めている途中の方で"Rubyのステップアップとしての次の一冊"をお探しの方におすすめです。