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

目的

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

Ruby on Rails チュートリアル 6.0(第6版)を学習中です。
学習を進める中で演習問題の解答を自分なりにまとめていくことにしました。

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

演習問題と解答

演習2.2.1

演習2.2.1.1

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

<解答>画面から表示が消えました。<p>タグの中身がなくなっているようです。

演習2.2.2.2

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

<解答>特になにごともなく登録できてしまいます。

演習2.2.2.3

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

<解答>同様に、なにごともなく登録できてしまいます。

演習2.2.2.4

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

<解答>確認の警告が出ます。(Are you sure?)
加えて、「User was successfully destroyed.」と表示されます。

演習2.2.2

演習2.2.2.1

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

<解答>

演習2.2.2.2

<問題>図示した振る舞いを見ながら、Scaffoldで生成されたコードの中でデータベースからユーザー情報を取得しているコードを探してみてください。Hint: set_userという特殊な場所の中にあります。

<解答>

[application_controller.rb]
class UsersController < ApplicationController
  before_action :set_user, only: [:show, :edit, :update, :destroy]

(中略)

  private
    # Use callbacks to share common setup or constraints between actions.
    def set_user
      @user = User.find(params[:id])
    end

    # Never trust parameters from the scary internet, only allow the white list through.
    def user_params
      params.require(:user).permit(:name, :email)
    end
end

演習2.2.2.3

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

<解答>edit.html.erb

演習2.3.1

演習2.3.1.1

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

<解答>画面から表示が消えました。
タグの中身がなくなっているようです。

演習2.3.1.2

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

<解答>特に問題なく作成できてしまいます。

演習2.3.1.3

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

<解答>エラーなく登録されます。

演習2.3.1.4

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

<解答>動作確認のみなので、省略します。

演習2.3.2

演習2.3.2.1

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

<解答>エラーメッセージが表示される。Content is too long (maximum is 140 characters)

演習2.3.2.2

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

<解答>idに”error_explanation”が追加されている。

演習2.3.3

演習2.3.3.1

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

<解答> リスト 2.17: Railsコンソールでアプリケーションの状態を調べてみる がヒントになりました。

consoleで色々調べてみるとアイデアが浮かぶかもしれません。

(前略)

<p>
  <strong>Microposts:</strong>
  <%= @user.microposts.first.content %>
</p>

(後略)

演習2.3.3.2

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

<解答>動作確認のみなので省略。

演習2.3.3.3

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

<解答>

class User < ApplicationRecord
  has_many :microposts
  validates :name, presence: true    # 「FILL_IN」をコードに置き換えてください
  validates :email, presence: true    # 「FILL_IN」をコードに置き換えてください
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ディレクトリ内にあるファイルを調べてみると…?)

[/toy_app/app/models/application_record.rb]
class ApplicationRecord < ActiveRecord::Base
  self.abstract_class = true
end

演習2.3.5

動作確認のみなので省略します。
email欄にデタラメな文字列を入力しても登録はできてしまいます。
今後のチャプターで修正していくことになるかと思います。

コメント

タイトルとURLをコピーしました