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.rb
のedit
アクションを見てみると,
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 以降
演習もありますが簡単なので省略します.