Railsチュートリアル 第2章

Railsチュートリアルの第2章を進めました. 概観をつかむ章ですね.

2.1 アプリケーションの計画

省略

2.2 Usersリソース

書かれている通りにコマンドを実行します. ただしコンテナの中に入る必要があるので, 以下を実行します.

docker exec web bash

するとコンテナに入ることができますから, チュートリアル通りに進めることができます.

$ rails generate scaffold User name:string email:string
$ rails db:migrate

ブラウザでlocalhost/usersへアクセスすると, チュートリアル通りになっています. rails serverは実行しなくてOKです.


2.2.1

好きなダーツプレイヤーの名前を入れていろいろ試しました.

演習1

ブラウザはSafariを使っているので,

Cmd + Option + U

でソースを表示します.

新しくユーザーを作成すると, 演習で問われている箇所が発見できます.

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

リロードすると, タグだけが残りました.

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

演習2, 3

問題なくユーザーが作成できました. バリデーションはまだ実装されていないということですね.

演習4

Are you sure?というダイアログが表示されました.


2.2.2

MVCやRESTなどのキーワードが登場.

演習1

省略

演習2

app/controllers/users_controller.rbeditアクションを見てみると,

def edit
end

あれ? 空っぽ...

と思ったらprivate methodが定義されていました.

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

これが各アクションの前に実行されることは, UsersControllerのはじめの方を見るとわかります.

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

演習3

以下の通りです.

app/views/users/edit.html.erb

2.3 Micropostsリソース

2.3.1

Usersリソースと同様ですね

演習1

これもUsersリソースと同様でした.

演習2

ContentもUserも空っぽであっても, Micropostは作成できました.

演習3

abc...xyzを6回入力して試してみましたが, 問題なく投稿できました.

演習4

Usersリソースの場合と同様にAre you sure?とダイアログが表示されました.


2.3.2

はじめmaximamとスペルミスをしてしまいましたが, バリデーションが追加されたことがチェックできました. ただエラーメッセージが真っ赤でどぎつい!

演習1

バリデーションを追加すると同時にチェックしてしまいました.

演習2

見てみましたが, これだけでよいのでしょうかね.

<div id="error_explanation">
  <h2>1 error prohibited this micropost from being saved:</h2>

  <ul>
    <li>Content is too long (maximum is 140 characters)</li>
  </ul>
</div>

2.3.3

指定された通りにリレーションを定義します.

rails consoleを使うためにコンテナの中に入ります.

$ docker-compose exec web bash

対話的に, ひとつのuserに複数のmicropostsが結びついていることがわかりました.

演習1

userの取得はすでにコントローラーに実装されているので, Viewファイルだけを編集すればいいですね. 以下をshow.html.erbに追加すればよいです.

# app/view/users/show.html.erbの一部

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

演習2, 3

指示通りに編集し, バリデーションが設定されたことが確認できました.

2.3.4 以降

演習もありますが簡単なので省略します.