Ruby on Rails  第2章 チュートリアル やることリストと学んだこと

Rails5.1.4（第4版）でのRails tutorialの第2章のやることのリスト（要約）と学んだことを個人的にをまとめました。なにか、訂正や間違いがあればご指摘していただけると助かります。

scaffoldを使ってToyアプリケーションの作成

1.[新規作成(下準備)](#1新規作成下準備)
2.
3.
4.

#1.新規作成(下準備)
第1章と同じ手順で

- 新規アプリを作成して

```bash:bash
cd ~/environment
$ rails _5.1.4_ new toy_app
$ cd toy_app/
```
Gemfileを↓に書き換えて

```ruby:Gemfile
  source 'https://rubygems.org'

gem 'rails',        '5.1.4'
gem 'puma',         '3.9.1'
gem 'sass-rails',   '5.0.6'
gem 'uglifier',     '3.2.0'
gem 'coffee-rails', '4.2.2'
gem 'jquery-rails', '4.3.1'
gem 'turbolinks',   '5.0.1'
gem 'jbuilder',     '2.7.0'

group :development, :test do
  gem 'sqlite3', '1.3.13'
  gem 'byebug',  '9.0.6', platform: :mri
end

group :development do
  gem 'web-console',           '3.5.1'
  gem 'listen',                '3.1.5'
  gem 'spring',                '2.0.2'
  gem 'spring-watcher-listen', '2.0.1'
end

group :production do
  gem 'pg', '0.20.0'
end

# Windows環境ではtzinfo-dataというgemを含める必要があります
gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]
```
Gemパッケージをインストール（アップデート）

```bash:bash
$ bundle install --without production
[ $bundle update ]
```




toyアプリをバージョン管理下に置くためにローカルリポジトリを作成してcommit

```bash:bash
$ git init
$ git add -A
$ git commit -m "Initialize repository"
```

リモートリポジトリを作成してtoyアプリをpush

- Bitbucketのサイトで [Create] ボタンをクリック

```bash:bash
$ git remote add origin git@bitbucket.org:<username>/toy_app.git
$ git push -u origin --all
```
前章と同じようにHello Worldを表示すりためにapplication_controller.rbとroutes.rbを変更し、変更をコミット

```
$ git commit -am "Add hello"
```

本番環境にデプロイにするためにHerokuサーバーにサンプルアプリケーションの実行場所を作成しpush

```bash:bash
$ heroku create
$ git push heroku master
```
下準備終わり

[Ruby on Ralis チュートリアル](https://railstutorial.jp/chapters/toy_app?version=5.1#sec-planning_the_application)




#2 Scaffoldでアプリ作成

- Usersリソースの作成
  - ユーザー用のデータモデルと、そのモデルを表示するためのWebインターフェイスを合わせてUsersリソ ースという。Usersリソースは、ユーザーというものを、HTTPプロトコル経由で自由に作成/取得/更新/削除できるオブジェクト。
  - scaffoldを使えば簡単にUsersリソースを作成することができる。

```bash:bash
$ rails generate scaffold User name:string email:string
```


- 新しいデータモデルでデータベースを更新する
- 
```bash:bash
$ rails db:migrate
```



- indexページ(/users)の仕組み
![image.png](https://qiita-image-store.s3.amazonaws.com/0/162347/30e0181f-04e1-f181-3809-b574d3342465.png)


`resources :users` というルーティングルールが追加される

```rb:routes.rb
Rails.application.routes.draw do
  resources :users
  root 'users#index'
end
```

- usersリソースが提供するRESTfulなルート
![スクリーンショット 2018-05-05 7.07.14.png](https://qiita-image-store.s3.amazonaws.com/0/162347/61c5f504-d9d7-a142-7058-ab3be3376dad.png)






- scaffoldで生成されたUsersコントローラの骨格

```rb:users.controller
class UsersController < ApplicationController
  .
  .
  .
  def index
    .
    .
    .
  end

  def show
    .
    .
    .
  end

  def new
    .
    .
    .
  end

  def edit
    .
    .
    .
  end

  def create
    .
    .
    .
  end

  def update
    .
    .
    .
  end

  def destroy
    .
    .
    .
  end
end
```
index、show、new、editアクションはいずれもページを出力しているが、
create、update、destroyはページを出力せずにデータベース上のユーザー情報を操作する。


- 継承
  - **Controller** controllers/users_controller.rbは<br>
**Users_controller >> ApplicationController >> ActionController::Base** を継承

 - **Model**　models/user.rbは<br>
**User >> ApplicationRecord >> ActiveRecord::Base** を継承

#3
#4