Ruby on Railsチュートリアルの演習問題と解答をまとめる。
第2章 Toyアプリケーション - Railsチュートリアル
アウトプットすることで、より自分の理解を深めることを目的としています。 自分なりに調べて考えた回答のため、記載内容に誤りがある場合はコメントいただけると幸いです。
演習2.2.1
問題1
CSSを知っている読者へ: 新しいユーザーを作成し、ブラウザのHTMLインスペクター機能を使って「User was successfully created.」の箇所を調べてみてください。ブラウザをリロードすると、その箇所はどうなるでしょうか?
解答
消える。。
問題2
emailを入力せず、名前だけを入力しようとした場合、どうなるでしょうか?
解答
「User was successfully created.」となる。
emailなしでもユーザー登録可能
問題3
@example.com」のような間違ったメールアドレスを入力して更新しようとした場合、どうなるでしょうか?
解答
「User was successfully created.」となる。
間違ったメールアドレスでも登録可能
問題4
上記の演習で作成したユーザーを削除してみてください。ユーザーを削除したとき、Railsはどんなメッセージを表示するでしょうか?
解答
「Are you sure?」という確認が表示される
「ok」を押すと
「User was successfully destroyed.」と表示される
演習2.2.2
問題1
図 2.11を参考にしながら、/users/1/edit というURLにアクセスしたときの振る舞いについて図を書いてみてください。
解答
問題2
示した振る舞いを見ながら、Scaffoldで生成されたコードの中でデータベースからユーザー情報を取得しているコードを探してみてください。
解答
[app/controllers/users_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
問題3
ユーザーの情報を編集するページのファイル名は何でしょうか?
解答
[app/views/users/edit.html.erb]
演習2.3.1
問題1
CSSを知っている読者へ: 新しいマイクロポストを作成し、ブラウザのHTMLインスペクター機能を使って「Micropost was successfully created.」の箇所を調べてみてください。ブラウザをリロードすると、その箇所はどうなるでしょうか?
解答
消える。。
問題2
マイクロポストの作成画面で、ContentもUserも空にして作成しようとするどうなるでしょうか?
解答
「Micropost was successfully created.」 空のデータが保存されてしまう
問題3
141文字以上の文字列をContentに入力した状態で、マイクロポストを作成しようとするとどうなるでしょうか? (ヒント: WikipediaのRubyの記事にある1段落目がちょうど150文字程度ですが、どうなりますか?)
解答
「Micropost was successfully created.」 文字数に関係なく保存が成功する
問題4
上記の演習で作成したマイクロポストを削除してみましょう。
解答
「Micropost was successfully destroyed.」
演習2.3.2
問題1
ほど2.3.1.1の演習でやったように、もう一度Contentに141文字以上を入力してみましょう。どのように振る舞いが変わったでしょうか?
解答
エラーが表示されマイクロポストを保存することができない
問題2
CSSを知っている読者へ: ブラウザのHTMLインスペクター機能を使って、表示されたエラーメッセージを調べてみてください。
解答
リロードすると消える。
演習2.3.3
問題1
ユーザーのshowページを編集し、ユーザーの最初のマイクロポストを表示してみましょう。同ファイル内の他のコードから文法を推測してみてください (コラム 1.1で紹介した技術の出番です)。うまく表示できたかどうか、/users/1 にアクセスして確認してみましょう。
解答
[app/views/users/show.html.erb] (前略) <p> <strong>Email:</strong> <%= @user.email %> </p># ここから <p> <strong>Microposts</strong> <%= @user.microposts.first.content %> </p> # ここまで追加
<%= link_to 'Edit', edit_user_path(@user) %> | <%= link_to 'Back', users_path %>
問題2
リスト 2.16は、マイクロポストのContentが存在しているかどうかを検証するバリデーションです。マイクロポストが空でないことを検証できているかどうか、実際に試してみましょう (図 2.16のようになっていると成功です)。
解答
リスト2.16, 図2.16参照
問題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
問題1
Applicationコントローラのファイルを開き、ApplicationControllerがActionController::Baseを継承している部分のコードを探してみてください。
解答
[app/controllers/application_controller.rb]class ApplicationController < ActionController::Base (中略) end
問題2
ApplicationRecordがActiveRecord::Baseを継承しているコードはどこにあるでしょうか? 先ほどの演習を参考に、探してみてください。ヒント: コントローラと本質的には同じ仕組みなので、app/modelsディレクトリ内にあるファイルを調べてみると...?)
解答
[app/models/application_record.rb]class ApplicationRecord < ActiveRecord::Base self.abstract_class = true end
演習2.3.5
問題1
本番環境で2〜3人のユーザーを作成してみましょう。
問題2
本番環境で最初のユーザーのマイクロポストを作ってみましょう
問題3
マイクロポストのContentに141文字以上を入力した状態で、マイクロポストを作成してみましょう。リスト 2.13で加えたバリデーションが本番環境でもうまく動くかどうか、確認してみてください。
解答
上記3つはそのままなので省略
おわり!