Railsチュートリアル　第２章まとめ

# 2.2Usersリソース

```ruby:データモデルを作る
rails generate scaffold User name:string email:string
```
```ruby:データベースをマイグレートする
rails db:migrate
```

## 2.2.2MVCの挙動
* ルーティング設定ファイルは、config/routes.rb

```ruby:config/routes.rb
Rails.application.routes.draw do
    resources :users
    root 'users#index' <- デフォルトページの代わりに、ユーザー一覧を表示するようにしている
end
```
* デフォルトページというのは、「/」にアクセスしたとき

* 
<table>
  <caption>RailsにおけるRESTアーキテクチャを構成する全てのアクション一覧</caption>
  <thead>
    <tr>
      <th>HTTP<br>リクエスト<br>メソッド</th> <th>URL</th> <th>アクション</th> <th>用途</th>
    </tr>
  </thead>
  <tr>
    <td> GET </td> <td>/users</td><td> index </td> <td>すべてのユーザーを一覧するページ</td>
  </tr>
  <tr>
     <td> GET </td> <td>/users/1</td><td> show </td> <td>id=1のユーザーを表示するページ</td>
  </tr>
  
  <tr>
     <td> GET </td> <td>/users/new</td><td> new </td> <td>新規ユーザーを作成するページ</td>
  </tr>
  
  <tr>
     <td> POST </td> <td>/users</td><td> create </td> <td>ユーザーを作成するページ</td>
  </tr>
  
  <tr>
     <td> GET </td> <td>/users/1/edit</td><td> edit </td> <td>id=1のユーザーを編集するページ</td>
  </tr>
  
  <tr>
     <td> PATCH </td> <td>/users/1</td><td> show </td> <td>id=1のユーザーを更新するページ</td>
  </tr>
  
  <tr>
     <td> DELETE </td> <td>/users/1</td><td> destroy </td> <td>id=1のユーザーを削除するページ</td>
  </tr>
</table>

:::note info
**REST：REpresentational State Transfer**
インターネットそのものやWebアプリケーションなどの、分散・ネットワーク化されたシステムやアプリケーションを構築するためのアーキテクチャのスタイルの一つ。

railsアプリケーションにおけるRESTとは、アプリケーションを構成するコンポーネント（ユーザーやマイクロポストなど）を「**リソース**」としてモデル化することを指す。
これらのリソースは、CRUDと４つの基本的なHTTPrequestメソッド（POST/GET/PATCH/DELETE）の両方に対応している。
（Create：POST、Read：GET、Update：PATCH、Delete：DELETE）
:::

* **Active Record**というRubyライブラリのおかげで、User.allというリクエストに対して、DB上のすべてのユーザーを返すことができる（ApplicationRecordを継承することで色々できるようになっている）

1. `@users = User.all`ユーザ一覧を取得
1. `@users` 変数にユーザー一覧が保存されると、コントローラはビューを呼び出す
1. 一覧表示なので、index.html.erbビュー。`@users`の一覧を並べ、１行ごとにHTMLの行として出力する（`<% @users.each do |user| %>`）
1. ビューはその内容をHTMLに変換
1.  コントローラがブラウザにHTMLを送信＞ブラウザでHTMLが表示される

* @記号で始まる変数　＝　**インスタンス変数**
    * コントローラで宣言したインスタンス変数はビューでも使える


## 2.2.3Usersリソースの欠点
scaffoldで作成したUsersリソースは、問題点もあり。。
* データの検証が行われていない　
    * 必須やバリデーションチェックがない
* ユーザー認証が行われていない
    * ログイン、ログアウトが行われていないので、誰でも無制限に操作できてしまう
* テストが書かれていない
    * 簡単なテストは一応含まれている
    * でもデータ検証やユーザー認証、その他の必要な要求を満たしていない
* レイアウトやスタイルが整っていない
    * サイトデザインも操作法も一貫していない
* 理解が困難
    * ちょー複雑（理解できたら「熟練」）


# 2.3Micropostsリソース

## 2.3.2マイクロポストをマイクロにする
* バリデーション制御
```ruby:app/models/micropost.rb
class Micropost < ApplicationRecord
  validates :content, length: { maximum: 140 }
end
```

## 2.3.3ユーザーはたくさんマイクロポストを持っている
* テーブルの紐付け
```ruby:対1
class Micropost < ApplicationRecord
  belongs_to :users
  validates :content, length: { maximum: 140 }
end
```

```ruby:対複数
class User < ApplicationRecord
  has_many :microposts
end
```

```ruby:RailsConsole
rails console

first_user = User.first
first_user.microposts

micropost = first_user.microposts.first
micropost
micropost.user

exit
```


# 2.5Toyアプリケーションをデプロイする

設定ファイル作成
```設定ファイル
touch bin/render-build.sh
```

```ruby:bin/render-build.sh
#!/usr/bin/env bash
# exit on error
set -o errexit
bundle install
bundle exec rails assets:precompile
bundle exec rails assets:clean
bundle exec rails db:migrate
```
pushする

デプロイ
https://railstutorial.jp/chapters/beginning?version=7.0#sec-deploying


https://dashboard.render.com/

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3731557/7defc5d8-54a6-cdcc-0cd1-306bf6fe02d2.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3731557/ee5c955e-d130-7631-4ec6-2294e0ea5801.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3731557/5e033d95-18e5-8559-20c9-3e521db51602.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3731557/edae5a6f-2b7d-6bb5-356f-c1cca6eb01c3.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3731557/2d94143a-3933-81b8-2f8e-8ea5700df2f3.png)

```terminal:デプロイ設定ファイル作成
# config/master.key があるかどうかを確認する
$ ls config/master.key
ls: config/master.key: No such file or directory

# 既存の credentials.yml.enc を削除する
$ rm config/credentials.yml.enc

# 新しい credentials.yml.enc と master.key を作成する
$ rails credentials:edit

# ココで credentials.yml.enc ファイルが開きますが、変更せずに閉じてください。
# pushする
```

```terminal:RAILS_MASTER_KEYの値
code config/master.key
```

```terminal:Build Command の値
./bin/render-build.sh
```