Edited at

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

More than 1 year has passed since last update.

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 にアクセスして確認してみましょう。

<解答>

"<%= @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

<問題>

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

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

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

<解答>

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


関連記事

Ruby on Rails チュートリアル 完全攻略 概要と演習解答総まとめ

http://mochikichi.hatenablog.com/entry/rails_tutorial_guide