LoginSignup
0
0

More than 3 years have passed since last update.

【Railsチュートリアル】第2章 Toyアプリケーション 演習と解答

Last updated at Posted at 2021-01-23

演習と回答

2.2.1 ユーザーページを探検する

2.2.1 - 1

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


<p id="notice">User was successfully created.</p>

リロード前は上のようになっていて


<p id="notice"></p>

リロードしたあとはUser was successfully created.が消えて空白になっていた。

2.2.1 - 2

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

名前だけでも登録ができる。

2.2.1 - 3

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

更新できる。

2.2.1 - 4

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


User Destroy (1.1ms)  DELETE FROM "users" WHERE "users"."id" = ?  [["id", 3]]

などと表示される。

2.2.2 MVCの挙動

2.2.2 - 1

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

割愛。

2.2.2 - 2

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

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

2.2.2 - 3

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

edit.html.erb

2.3.1 マイクロポストを探検する

2.3.1 - 1

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


<p id="notice">Micropost was successfully created.</p>

リロード前は上のようになっていて


<p id="notice"></p>

リロードしたあとはMicropost was successfully created.が消えて空白になっていた。

2.3.1 - 2

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

作成できる。

2.3.1 - 3

141文字以上の文字列をContentに入力した状態で、マイクロポストを作成しようとするとどうなるでしょうか?(ヒント: WikipediaのRubyの記事にある設計思想の引用文が140文字を超えているので、これをコピペしてみましょう)

作成できる。

2.3.1 - 4

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

それぞれ削除しました。

2.3.2 マイクロポストをマイクロにする

2.3.2 - 1

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

作成できず、エラーメッセージが出るようになった。

2.3.2 - 2

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


<textarea name="micropost[content]" id="micropost_content">Ruby には Perl や Python とは決定的に違う点があり、それこそが Ruby の存在価値なのです。それは「楽しさ」です。私の知る限り、Ruby ほど「楽しさ」について焦点を当てている言語は他にありません。Ruby は純粋に楽しみのために設計され、言語を作る人、使う人、学ぶ人すべてが楽しめることを目的としています。しかし、ただ単に楽しいだけではありません。Ruby は実用性も十分です。実用性がなければ楽しめないではありませんか。
— まつもとゆきひろ、Ruby プログラミング入門 まえがき 監修者よりのページ</textarea>

2.3.3 ユーザーはたくさんマイクロポストを持っている

2.3.3 - 1

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


first_user.microposts
  Micropost Load (0.1ms)  SELECT "microposts".* FROM "microposts" WHERE "microposts"."user_id" = ? LIMIT ?  [["user_id", 1], ["LIMIT", 11]]
 => #<ActiveRecord::Associations::CollectionProxy [#<Micropost id: 7, content: "hi!", user_id: 1, created_at: "2021-01-23 06:05:27", updated_at: "2021-01-23 06:05:27">]> 
2.6.3 :006 > 

2.3.3 - 2

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

できたので割愛。

2.3.3 - 3

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

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 #この行
  def hello
    render html: "hello, world"
  end
end

2.3.4 - 2

ApplicationRecordがActiveRecord::Baseを継承しているコードはどこにあるでしょうか? 先ほどの演習を参考に、探してみてください。ヒント: コントローラと本質的には同じ仕組みなので、app/modelsディレクトリ内にあるファイルを調べてみると...?)

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

2.3.5 アプリケーションをデプロイする

2.3.5 - 1

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

2.3.5 - 2

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

2.3.5 - 3

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

うまく動きました。

さいごに

Railsチュートリアル第2章をクリアしました!
エラーに遭遇しましたが、きちんと文章を読む、検索する、めげない、で解決へたどり着けました。これからもっと難しくおもしろくなってくるようで、楽しみです。

  • MVCモデルを知った
  • RESTアーキテクチャを知った
  • データモデルを作成した
  • Twitterっぽい何かを作ることができた
  • エラーに遭遇しても検索して解決へたどり着けた
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0