Ruby on Rails tutorialを通してのメモ (第2章後半)

前回まで

 

taokiengineer.hatenadiary.jp

 

  • 前回まではscaffoldを使用して簡単なユーザ作成画面を表示させることができました。

 

作業開始  

@  2.2.2 MVCの挙動 

point

  • ここでは、MVCのモデルについて詳しく説明しています。
  • ポイントとしては、URLを見ながら今の画面がどこか、対応する画面になぜ遷移できるかを気にすることだと思います。私も考えるようになったのはアプリケーションを数回作成した時です。🤔今は図2.11の説明を読んで見て「こういうものなんだな」と概要を把握してもらえばokだと思います。

 

@ 2.2.3 Usersリソースの欠点 

point
  •  scaffoldについての問題点を提示しています。以下の通りです。
  1. データの検証が行われない。( ユーザ名が空欄,メールアドレスが"@"がないなどの場合でも登録できてしまう。)
  2. ユーザー認証が行われない。(ログイン、ログアウト機能がない)
  3. 必要なテストコード が書かれていない。(テストコードはこれを機会に覚えておきたい。実は私もまだ習得していません。🙏)
  4. レイアウトが整っていない。
  5. コードの内容が複雑。

 

@ 2.3 Micropostsリソース 

point

  • MicropostsもUserの時と同様、scaffoldでモデルを生成します。(ここで一度Userモデルの生成方法を見直すといいかもしれません。)
  • この章ではUserリソースとMicropostsリソースの違いについて理解することが目的のようです。

 

point

  • rails generate scaffoldコマンドをオプションをつけて実装しています。
  • 「2.2Userリソース」と見比べながら進めていきます。
$ rails generate scaffold Micropost content:text user_id:integer
  • contentはtext型に、user_idはinteger(int)型に指定しています。確かidは自動で追加されたはずでしたね。
  • $ rails generate + $ rails db:migrate rails generate した後はマイグレートをします。Userの時にも行いました。
$ rails db:migrate
  • routes.rbにMicropostsのルーティングが追加されました。

  config/routes.rb

  resources :microposts

 確認できましたでしょうか?自動で追加、更新されるのですね。

  •  resource は自動でコントローラにアクションを生成してくれます。microposts_controller.rbを確認するとわかります。これは、users_controller.rbも同様です。(コントローラに生成されたファイルは全部で7種類であることも確認しましょう。→ index,show,new,create,edit,update,destroy)
  • 実際にURLの/micropostsにアクセスして見ましょう。私の場合は「localhost:3000/microposts」にアクセスしました。
  • new micropostsをクリックし、 content にはテキストが入力できるテキストボックスが、Userには数字が選択できるようになっていることが確認できたでしょうか。前回のUserリソースの時はメールアドレスを作成できましたが、今回は簡単にテキストを投稿することができました。実際にはscaffoldコマンドの引数のオプションを少し変更しただけで、ほとんど違いがありません。

 

point

  • テキスト入力欄(content)は現在、文字数制限がありません。ツイッターも文字数が限られていると同様、また、「マイクロポスト」にも文字数制限をかけます。
  • 制限を加える時には、バリデーションを使用します。

リスト2.13

app/models/micropost.rb

  validates :content, length: { maximum: 140 }
  •  validates , contentに対して、length: {maximum: 140}なので文字数を140文字に制限しているように読み取れます。🤔
  • 実際にcontentの欄に140文字以上文字を入力するとtutolialのようなエラーが出ました。何事も確認が大切です。逆にすんなりと投稿できてしまった場合はvalidationを記載したファイルに誤字脱字がないか確認、または本当に140文字なのかを確認する必要があります。

 

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

point

  • 一人のユーザは、複数のマイクロポスト、つまり1ユーザは、複数投稿することができます。ツイッターも作成したアカウントは複数呟けるのでそれと同じことを行います。
  • UserモデルとMicropostモデルをある設定(関連付け,別名アソシエーション)することにより1ユーザが複数投稿できるように表現できます。

 

 リスト2.14 - 1ユーザは複数のマイクロポストを持つ。

app/models/user.rb

  has_many :microposts
  • このように、複数モデルを持つ場合は、持ち主は「has_many」を設定します。

 

 リスト2.15 - 1マイクロポストは1ユーザに属する

app/models/micropost.rb

  belongs_to :user

  • 逆に所属する側は「belongs_to」を設定します。

 

@ 2.3.4 継承の階層

 point

  • Toyアプリケーションで使用しているRailsコントローラとモデルのクラス階層...正直概念の説明は、「そういうもだ」と覚えるので納得いかないことがある場合時は先に進めてあとで見返してみるがいいと思います。私も概念の説明は完璧ではありません。

 

リスト2.18 - Userクラスの継承

app/models/user.rb

class User < ApplicationRecord

リスト2.19 - Micropostクラスに置ける継承

app/models/micropost.rb

class Micropost < ApplicationRecord
  •  モデルはどちらもApplicationRecordというクラスを継承しています。なぜか?<が継承と呼ばれるものなのです。
  • ApplicationRecordはさらに、ActiveRecord: :Base というクラスを継承しています。ややこしいです。。
  • このようにクラスを継承することでモデルはデータベースにアクセスできたり、Rubyの属性のような書き方ができるようになります!
  • コントローラも同様にクラスを継承しています。Railsはクラスを継承して機能を実装していることがわかりました。

 

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

  • デプロイ?省略させてください、、。

 

2.4 最後に

 point

  • 2章のまとめです。
  • Railsのアプリケーションを完成させました。機能としては、ユーザの登録機能、投稿機能の二つです。よってこれからはこの二つの機能はどのようなアプリケーションにおいても実装できることを自信持ってください!

 

to be continued... 
  • 真っ白のページですが、機能はほとんどどのアプリケーションも同じ仕組みであると考えると、あとは画面のレイアウトの問題です。レイアウトが綺麗だと、不思議といいアプリケーションに見えてしまいます。実際アプリケーションを使う側(顧客)は中の機能性よりも見た目を気にすると思います。まあ5章以降の話なのですが、、。
 
オススメの曲

  •  アルバムTRUEの中でも一番好きな曲。前向きな歌詞が気に入っています。
  • 楽しい音楽を聴きながら開発することが続けることの秘訣🎵