(Ruby on Rails6) データーベースの作成とビューへの表示

#マシンスペック/バージョン
・バージョン 10.15.3
・Ruby ruby 2.6.3p62
・Rails  6.0.3.2

#まえがき
こちらの記事では、Ruby on Rails6 でのデーターベースの作成とビューへの表示を忘却録として記録します。もしも、データーベース の作成などで困っている方がいればお役に立てると嬉しいです。

#準備
こちらでは、ディレクトリの作成から行います。
データーベースの作成は、後ほど記述しますので、ご存知の方は読み飛ばしても大丈夫です!

##ディレクトリの作成
以下のコマンドを任意のディレクトリ先で入力してください。
また、herokuにデプロイを想定しているのでデーターベース(postgresql)を設定しています。


```terminal:terminal
rails new ディレクトリ名 -TB --database=postgresql

(例)↓
rails new form_test -TB --database=postgresql
```
設定するデーターベース がなければ以下のコマンドでも問題ありません。

```terminal:terminal
rails new ディレクトリ名

(例)↓
rails new form_test
```
※postgresql で設定すると、ブラウザ表示時にエラーになります。その処理は後ほど記述します。

##ページの作成
先ほど生成したディレクトリ先に移動しページを作成しましょう。

```terminal:terminal
cd ディレクトリ名

(例↓)
cd form_test
```

```terminal:terminal
rails generate controller 任意の名前 index

(例)↓
rails generate controller Forms index
```
"index" は、作成意図で入力名を変更してください。
generate→g の省略コマンドでも問題ありません。
また、ディレクトリ名前は "Forms" のような複数形にすると後に管理しやすいです。

```terminal:terminal
rails g controller 任意の名前 index

(例)↓
rails g controller Forms index
```

##routesの設定
以下をroutesに設定すると http://localhost:3000/forms 設定されます。

```rb:config/routes
Rails.application.routes.draw do
  # get "任意名" => "任意の値#index"
    get "forms" => "forms#index"
  # For details on the DSL available within this file, see https://guides.rubyonrails.org/routing.html
end
```

##ブラウザで確認
一度ブラウザで確認してみます。
ブラウザへの表示をコマンドを入力してください。

```terminal:terminal
rails s
or
rails server
```

表示されましたか？

また、postgresql のディレクトリ作成で記述しましたが、エラーが出るかもしれません(私はエラーしました)
その際は以下のコマンドを入力してください。

```terminal:terminal
rails db:create
```
エラーの原因は別記事で説明します。

#データーベースを準備
ここからは、データベースの作成を行います。

##データーベースを作成

```terminal:terminal
rails g model データベース名 content:text
(例)↓
rails g model Forms content:text
```
データーベース名は、頭文字を "大文字" にすることと "複数形" にすると管理しやすいです。
省略をしていない↓でもOK

```terminal:terminal
rails generate model データベース名 content:text
(例)↓
rails generate model Forms content:text
```

##データーベースのマイグレーション
データベースの作成後は、マイグレーションをしてください。
忘れてしまうと、ブラウザで確認する際にエラーが発生します。

```terminal:terminal
rails db:migrate
```

##データーベースの投稿を追加
インスタンス化を行います。
この処理を行うには rails console と先に、コマンドに入力してください。

```terminal:terminal
rails console

任意名 = データベース名.new(content: "今日からProgateでRailsの勉強するよー！")
任意名.save

(例)↓
form1 = Form.new(content: "test")
form1.save
```
余談ですが、ディレクトリ作成時に↓と入力した場合は "forms(formの複数形)" なので、データーベースの追加時には "form(単数形)" にすると良いです。

```terminal:terminal
rails generate controller forms index
```
####データーベースの投稿を保存
投稿を追加後は、saveをしてください。
これを行うことにより、投稿が保存されます。

```terminal:terminal
任意名.save

(例)↓
form1.save

quit
```
quit は rails console を終了するコマンドです。
この処理を2~‥繰り返すと、複数の投稿を保存できます。

##データーベースの投稿を取得

```terminal:terminal
今回私は "ディレクトリ名 = データベース名.all" を使います。

ディレクトリ名 = データベース名.all
forms = Form.all
→全ての値を取得

ディレクトリ名[0]
forms[0]
→初めの値を取得

ディレクトリ名[0].content
forms[0].content
→初めの値(content)を取得
```

以上が、データベースの作成でした。次はビューに表示する作業を行います。

#データベースの内容をビューに保存

##コントロールの設定
controllerに、データベースの取り出しで使用した "ディレクトリ名 = データベース名.all" を設定することにより全ての投稿内容を取得できます。

また、Rubyでは "form" は "@form" のように @ を付けないといけません。

```rb:app/controllers/任意_controller.rb
class PostsController < ApplicationController
  def index
  # @ディレクトリ名 = データベース名.all
    @forms = Form.all
  end
end
```

##ビューの設定とEach配列

```rb:app/views/任意/index.html.erb
<h1>Forms#index</h1>
<p>Find me in app/views/forms/index.html.erb</p>
　<% @ディレクトリ名.each do |form| %>
      <div>
　　　　　<%= ディレクトリ名の単数形.content %>
      </div>
  <% end %>
```

例↓

```rb:app/views/任意/index.html.erb
<h1>Forms#index</h1>
<p>Find me in app/views/forms/index.html.erb</p>
 <% @forms.each do |form| %>
      <div>
        <%= form.content %>
      </div>
 <% end %>
```

###Eachによる繰り返し処理

```rb:app/views/任意/index.html.erb
 <% @forms.each do |form| %>
     処理
 <% end %>
```
each を使うことにより、繰り返しの処理を行うことができます。
また

```rb:app/views/任意/index.html.erb
<%= form.content %>
```
は、データーベースの "content" を表示させています。

そして、Rubyでは↓の表記の違いで異なる挙動が起こるので注意してください。
ここでは、データベースのcontentを表示させたいので <%= form.content %> と入力します。

```rb:app/views/任意/index.html.erb
<%= form.content %>
→文字列をビューへ表示(=が重要)

<% form.content %>
→文字列の結果をビュー表示しない
```

##ブラウザで確認
![rails_db-test.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262991/66f4b273-cc07-c0c1-e932-fe2469644ec7.png)
問題がなければ routes 先で、確認できます。
私はテストで test1 と test2 を表示させてみました。

以上のテストは、Githubで公開しています。
試してみたい方はダウンロードをしてみてください。

→<a href="https://github.com/ayu0819/test_rails6-database" target="blank">Github</a>

#あとがき
ここまで読んでいただき、ありがとうございます。
以上が、Ruby on Rails6 での データーベース作成とビューへの表示でした。
routesやcontrollerの設定が、複雑で少し疲れますがビューで表示されると嬉しいです。

#参考リンク
書籍: <a href="https://www.amazon.co.jp/%E3%81%9F%E3%81%AE%E3%81%97%E3%81%84Ruby-%E7%AC%AC6%E7%89%88-Informatics-IDEA-%E9%AB%98%E6%A9%8B/dp/4797399848/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&dchild=1&keywords=%E3%81%9F%E3%81%AE%E3%81%97%E3%81%84Ruby+%E7%AC%AC6%E7%89%88&qid=1600088731&s=books&sr=1-1" target="blank">たのしいRuby 第6版</a>

#私のリンク
また、Twitter・ポートフォリオのリンクがありますので、気になった方は
ぜひ繋がってください。プログラミング学習を共有できるフレンドが出来るととても嬉しいです。

<a href="https://twitter.com/0819_tateishi" target="blank">Twitter</a>
<a href="https://ayu-portfolio.herokuapp.com/" target="blank">Portfolio</a>
<a href="https://github.com/ayu0819" target="blank">Github</a>