ruby on rails を AWS Cloud9で実施 3　model作成　

https://qiita.com/TaichiEndoh/items/35294ff656499d9bbf8d

https://qiita.com/TaichiEndoh/items/9c19319df04a279403a3

環境　AWS Cloud9
environment type EC2
instance type t2.micro
platform ubuntu server 18.04 LTS

# Model を作成する

Rails が提供するModelは、
原則としてデータベース上にある
テーブルと対応しており

テーブルのデータを簡単に操作する機能を提供します


## MVC アーティテクチャの再確認
- Model：アプリで扱うデータを保持し、操作する
- View：受け取ったデータを表示する
- Controller：ユーザーからのリクエストを処理し、モデル・ビューを呼び出して結果を返す


http://www.rubylife.jp/rails/ini/index7.html


http://qiita.com/tshinsay/items/5b1724baf32b8b5113c2

Model：アプリで扱うデータを保持し、操作する
と記載のあるように
User という　テーブルを作成した場合
モデルで操作します

モデルを使うことで
SQLを直接記述することなく
わかりやすい Rubyのコードでデータを操作できます

## rails g model コマンドで user に関するモデルを作成

rails g modelの使い方
```
$ rails g model モデル名
```
https://pikawaka.com/rails/rails_g_model

AWS Cloud9
でuserモデルを作成してみます

```
rails g model User name:string age:integer
```
上記コマンドで

User　はモデル名

その下がデータベースのデータの構造です

name:string カラム名:データ型
age:integer カラム名:データ型

スペース区切りで複数　設定できます

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2629668/25e2de85-4e37-9969-45b0-e6672186f120.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2629668/e7fa456c-0e06-ddfc-ea40-de3603a57d12.png)

上記のマイグレーションファイルのスペルミスがないことを確認し
マイグレーションを実施します

## マイグレーション
マイグレーションは Rails で自動生成した設定内容をデータベースに反映させます

マイグレーションをもう少し、簡単に言うと
データベースのテーブルを作成・変更するための仕組みです

Railsは、マイグレーションファイルという設定ファイルを自動作成して
それをmigrationコマンドで、データベースに反映させます

以下のコマンドでデータベース設定を反映することが可能です
```
rails db:migrate
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2629668/7f742aca-b7d0-c81e-59ca-eb6cba1b032e.png)

エラーが出なければOKです

もしデータベース設定を取り消す場合は以下のコマンドになります
```
rails db:rollback
```

## データベース構造の確認

データベースをコマンドで操作できるモードに変更します
以下のコマンドを利用します
```
rails dbconsole
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2629668/c1bfe14f-9935-c1dd-cf7f-6bd96425a478.png)

終わるときは
.q　でデータベースを抜け出せます

## データベースの操作をする rails console

model クラスでデータベースを操作します

rails　コンソールを立ち上げます
```
rails c

#コンソール内でテーブル確認↓ 裏では自動でSQLが生成されて実行される
User.all

#テスト用のデータを入れてみる

user = User.new
user.name = '名前入力'
user.age = 数字入力
user.save

#一括で登録するとき
aaa = User.new(name:'aaaniki',age:20)
aaa.save
#一括で登録するとき
aaa2 = User.new(name:'aaaniki',age:20)
aaa2.save

#コンソール内でテーブル確認
User.all

#終わるとき
exit
```
上記コマンドで3件のレコードがテーブルに登録できたと思われます

https://qiita.com/Masato338/items/a16c62a532fde5838359

## データベースの値を表示

users_controller.rb
でUserデーブルの値を　インスタンス変数に格納します 
@users = User.all　の部分です

```users_controller.rb
class UsersController < ApplicationController
  def index
    # @ をつけるとインスタンス変数になる
    # @num は　インスタンス変数　となる　クラスのインスタンスごとに保持される変数
    # インスタンス変数 は　コントローラーの値を　View に受け渡すことができる
    @num = 10 + 1 + 1 + 1 - 4
    @users = User.all
  end
end
```

Viewに値を表示します

```index.html.erb
<!DOCTYPE html>
<html lang="ja">
<head>
    <title>初めてのrailsアプリケーション</title>
</head>
<body>
<h1>rails<h1>

<p>views　は分離するといい 見やすくなる！</p>

<p>インスタンス変数 は　コントローラーの値を　View に受け渡すことができる</p>
<p>以下がその例です！</p>
<p><%= @num %></p>

<p>実はusers_controller.rb で　読み込むviewsを指定しなくてもいい</p>
<p>これが設定よりも規約　のrailsの特徴！</p>

<p>データベースの値を取り出します</p>
<ul>
  <% @users.each do |user| %>
    <li>
       <%= user.id %>,<%= user.name %>,<%= user.age %>
    </li>
  <% end %>
</ul>

</body>
</html>
```

表示を確認します

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2629668/5b0a63b7-200b-4f38-5dbe-836e171e73c1.png)

... 見た目はともかくデータベースの値を取り出すことに成功しました！！！

# 次回からは　回答のできる掲示板　を作成していきます

 MVC アーティテクチャを想像しながら作成するとわかりやすいです

- Model：アプリで扱うデータを保持し、操作する
- View：受け取ったデータを表示する
- Controller：ユーザーからのリクエストを処理し、モデル・ビューを呼び出して結果を返す

最終的には
ある程度　見た目も綺麗な
回答のできる掲示板掲示板を作ろうと考えております

興味のある方は　↓　を見ていただけますと幸いです！！！

https://qiita.com/TaichiEndoh/items/522e956d569e5bbd7b8d