【Rails】DBのデータをビューで使用する

# コントローラ側の処理
まず、webページでDBのデータを使用する際は、コントローラからビューにデータを渡す。
そのために、コントローラにて変数を定義する必要がある。
コントローラにてモデルからデータを受け取り、そのデータを変数に代入することでビューに引き渡すことができる。

モデルからデータを取得する例をいくつか紹介する。

## テーブルごと取得する
テーブルの全データをそのまま取得する場合。
データを受け取りたいテーブルに紐づくモデルに対して、
<font color="Red">**モデル名.all**</font>


下記では、例としてmembersテーブルの中身とsongsテーブルの中身を取得してみた。

```ruby:members_controller.rb
class MembersController < ApplicationController
	def index 
		@members = Member.all
		@songs = Song.all
	end
end
```
##テーブルの中身を指定して取得する
### id (主キー)を指定する
指定したidを持つレコードのデータを取得する場合、findメソッドを使用する。
<font color="Red">**モデル名.find( *id* )**</font>

```ruby:
#例 id = 1 のレコードを取得
@member = Member.find(1)

#例 id = 1,3,5 のレコードを取得
@member = Member.find(1,3,5)
```

```ruby:members_controller.rb
class MembersController < ApplicationController
	def index 
		@member = Member.find(1)
	end
end
```
また、この形を応用してidをURLから取得する場合
<font color="Red">**モデル名.find(params[:id])**</font>
を使用することができる。

```ruby:members_controller.rb
class MembersController < ApplicationController
	def show
		@member = Member.find(params[:id])
	end
end
```
例の場合で説明すると、下の画像に示したURLの赤枠部分からidを取得してきてそのidを持つレコードを受け取ることができる。
<img width="566" alt="スクリーンショット 2018-08-08 0.23.29.png" src="https://qiita-image-store.s3.amazonaws.com/0/180127/6d3a9065-0a3d-6a94-ad99-aa30b30108f1.png">

### id(主キー)以外の中身を指定する
主キー以外のカラムにおいて、指定した値を持つレコードのデータを取得する場合はfind_byメソッドを使用する。またfind_byメソッドはレコードを<font color="Red">最初にヒットした1つ</font>しか取らない。
<font color="Red">**モデル名.find_by(カラム名: '値')**</font>

```ruby:
#例 artistの値がももいろクローバーZのレコードの中で、idが一番若いものを取得
@discography = Discography.find_by(artist: 'ももいろクローバーZ')

#例 ももいろクローバーZの曲かつ、2011年7月27日にリリースされたものでidが一番若いものを取得
@discography = Discography.find_by(artist: 'ももいろクローバーZ', released_date: '2011-07-27')
```


## レコードの個数を指定する
レコードの個数を制限することで、idが上からn個までのレコードを取得する。
といった指定ができる。
<font color="Red">**モデル名.limit( *n* )**</font>

下記では、例としてidが3までのレコードを取得してみた。

```ruby:members_controller.rb
class MembersController < ApplicationController
	def index 
		@members = Member.limit(3)
	end
end
```

## カラムを指定する
指定したカラムのデータを取得する場合。
<font color="Red">**モデル名.select("カラム名")**</font>

下記では例として、membersテーブルのnameカラムの中身のみを取得してみた。

```ruby:members_controller.rb
class MembersController < ApplicationController
	def index 
		@members = Member.select("name")
	end
end

```

# ビュー側の処理
コントローラから無事ビューにデータが渡されれば、ビューでそれを表示する記述をしてあげることでやっとwebページにデータを表示することができる。
前述したどの形式のデータを渡されたかによって使い方は変わるが、
ここではテーブルごと全てのデータを取得した場合の例を載せておくので、適切な形に変えて使用すること。

## 指定カラムの中身を全レコード分表示
**eachメソッド**を使用してnameカラムの中身を全レコード分表示してみた。

```html:views/members/index.html.erb
<head>
	<meta charset="utf-8">
	<link rel="stylesheet" href="members.scss" type="text/css">
</head>
<body>
	<% @members.each do |member| %>
		<%= member.name %><br>
	<% end %>
</body>
```
<img width="406" alt="スクリーンショット 2018-08-08 1.12.31.png" src="https://qiita-image-store.s3.amazonaws.com/0/180127/c8827975-452d-7fb5-cd6f-902e2f0687a7.png">

## 指定したフィールドの中身を表示
取得したデータから番地やカラムを指定して目的のフィールドの中身を表示してみた。
指定の仕方はリストに似ている。

下記ではsongsテーブルにおいて id = 1 のレコードからnameカラムの中身を表示した。

```html:views/members/index.html.erb
<head>
	<meta charset="utf-8">
	<link rel="stylesheet" href="members.scss" type="text/css">
</head>
<body>
	<%= @songs[0]['name'] %>
</body>
```
<img width="387" alt="スクリーンショット 2018-08-08 1.19.26.png" src="https://qiita-image-store.s3.amazonaws.com/0/180127/74b984ee-5f73-0bc9-40fa-d501f15a5c17.png">

---
以上、簡単なコントローラとビューのデータ受け渡しの書き方をまとめた。