【Ruby on Rails】rails g scaffoldとは？DBの作成方法

#【Ruby on Rails】rails g scaffoldとは
scaffoldとは「足場」の意味。railsでは基本的なDBに必要な物をまとめて作成してくれる。

サーバーを立ち上げると、DBの一覧を表示するページや、データの追加、編集、削除機能を含んだサイトができている。



##目次
1. [コマンド](#コマンド)
2. [作成される主なファイル](#作成される主なファイル)
    1. [controllersフォルダ](#1-controllersフォルダ)
    2. [modelsフォルダ](#2-controllersフォルダ)
    3. [viewsフォルダ](#3-viewsフォルダ)
    4. [dbフォルダ](#4-dbフォルダ)
    5. [assetsのjavascriptフォルダ](#5-assetsのjavascriptフォルダ)
    6. [assetsのcssフォルダ](#6-assetsのcssフォルダ)
    7. [localフォルダ](#7-localフォルダ)
7. [DB作成後の処理](#DB作成後の処理)
    8. [migrationの実行](#migrationの実行)
    9. [サーバー立ち上げ](#サーバー立ち上げ)


##コマンド
`rails g scaffold モデル名 カラム名1:データ型1　カラム名2:データ型2,,,,`
　┗ 「g」はgenerateの略
　┗ データ型を指定しない場合はstringになる


<br>

```:コマンドの例
$ rails g scaffold games name players
```

- games: モデル名
- name:　カラム
- players: カラム



<br>
▼ターミナルの処理内容

```:処理内容
      invoke  active_record
      create    db/migrate/20200825114158_create_games.rb
      create    app/models/game.rb
      invoke    test_unit
      create      test/models/game_test.rb
      create      test/fixtures/games.yml
      invoke  resource_route
       route    resources :games
      invoke  scaffold_controller
      create    app/controllers/games_controller.rb
      invoke    erb
      create      app/views/games
      create      app/views/games/index.html.erb
      create      app/views/games/edit.html.erb
      create      app/views/games/show.html.erb
      create      app/views/games/new.html.erb
      create      app/views/games/_form.html.erb
      invoke    test_unit
      create      test/controllers/games_controller_test.rb
      invoke    helper
      create      app/helpers/games_helper.rb
      invoke      test_unit
      invoke    jbuilder
      create      app/views/games/index.json.jbuilder
      create      app/views/games/show.json.jbuilder
      create      app/views/games/_game.json.jbuilder
      invoke  assets
      invoke    coffee
      create      app/assets/javascripts/games.coffee
      invoke    scss
      create      app/assets/stylesheets/games.scss
      invoke  scss
      create    app/assets/stylesheets/scaffolds.scss
```

dbフォルダのmigrateや、models,views, controllers, assetsなど主要フォルダ内に新しいファイルが作成されている。


##作成される主なファイル
###1. controllersフォルダ
controllersフォルダの中に、モデル名_controller.rbが作成される。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563526/5936fff8-560e-e5f0-be94-07a71bebab5d.png)

DB操作に必要な７つのアクション、index, show, new, edit, create, update, destroyと各処理が記載されている。





<br>
###2. modelsフォルダ
modelsフォルダの中の、concernsフォルダの中に、model名.rbが作成される。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563526/0983862e-ede7-0a8f-18ba-00ba4c49be2c.png)


```
class Game < ApplicationRecord
end
```

処理は未記入。必要に応じてvalidateなどの処理を記述する。


```rb:modelsのファイル記述例
class User < ApplicationRecord
    validates :name, 
               presence: {message: "名前を入力してください。"}
end
```



###3. viewsフォルダ
viewsフォルダ内の、モデル名のフォルダの中に、各アクション名のついたテンプレートが生成されている。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563526/ceae5553-5f0d-2c73-bde6-56be8fdf74d0.png)

各テンプレートは記述済み。DBの一覧表示や編集、詳細ページなどとなっている。

|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563526/dfb281fd-a649-459c-3d64-469282b9ab78.png)|
|:--|



###4. dbフォルダ
dbフォルダの中のmigrateフォルダの中に　日時_create_モデル名.rbが作成されている

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563526/ce833f2b-11b2-0dbd-7449-fdf81acb2ff2.png)


```rb:migrate
class CreateGames < ActiveRecord::Migration[5.0]
  def change
    create_table :games do |t|
      t.string :name
      t.string :players

      t.timestamps
    end
  end
end
```

DBとrailsを紐づける設計書（migration）が作成されている。



###5. assetsのjavascriptフォルダ
モデル名.coffeeファイルが作成されている。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563526/0f9e871f-62f0-a95e-e84b-28e008e825a9.png)




###6. assetsのcssフォルダ
モデル名.scssと、scaffolds.scssの２つのファイルが作成されている。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563526/a8ff7710-2f17-06f3-3be8-4a77d21f66f2.png)



###7. localフォルダ
localフォルダのroutes.rbファイルに`resources :games`が追記されている。

```rb
Rails.application.routes.draw do
  resources :games
  # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
end
```

<br>
▼処理の中身をみるには、
`$ rake routes`を実行することで処理の中身を確認することができる。

```
user1:~/environment/boardgame-app $ rake routes
   Prefix Verb   URI Pattern               Controller#Action
    games GET    /games(.:format)          games#index
          POST   /games(.:format)          games#create
 new_game GET    /games/new(.:format)      games#new
edit_game GET    /games/:id/edit(.:format) games#edit
     game GET    /games/:id(.:format)      games#show
          PATCH  /games/:id(.:format)      games#update
          PUT    /games/:id(.:format)      games#update
          DELETE /games/:id(.:format)      games#destroy
```




<br>
###DB作成後の処理
##migrationの実行
scaffoldで自動生成された、マイグレーションファイルを利用して、DBにテーブルを作成する。

```
$ rake db:migrate
```


##サーバー立ち上げ
dbにテーブルの作成が完成したら、サーバーを立ち上げる。

```
$ rails s 
```





<br>
###参考
＞[Rails公式 migrateについて](https://railsguides.jp/active_record_migrations.html)