Edited at

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

More than 1 year has passed since last update.


コントローラ側の処理

まず、webページでDBのデータを使用する際は、コントローラからビューにデータを渡す。

そのために、コントローラにて変数を定義する必要がある。

コントローラにてモデルからデータを受け取り、そのデータを変数に代入することでビューに引き渡すことができる。

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


テーブルごと取得する

テーブルの全データをそのまま取得する場合。

データを受け取りたいテーブルに紐づくモデルに対して、

モデル名.all

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


members_controller.rb

class MembersController < ApplicationController

def index
@members = Member.all
@songs = Song.all
end
end


テーブルの中身を指定して取得する


id (主キー)を指定する

指定したidを持つレコードのデータを取得する場合、findメソッドを使用する。

モデル名.find( id )

#例 id = 1 のレコードを取得

@member = Member.find(1)

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


members_controller.rb

class MembersController < ApplicationController

def index
@member = Member.find(1)
end
end

また、この形を応用してidをURLから取得する場合

モデル名.find(params[:id])

を使用することができる。


members_controller.rb

class MembersController < ApplicationController

def show
@member = Member.find(params[:id])
end
end

例の場合で説明すると、下の画像に示したURLの赤枠部分からidを取得してきてそのidを持つレコードを受け取ることができる。


id(主キー)以外の中身を指定する

主キー以外のカラムにおいて、指定した値を持つレコードのデータを取得する場合はfind_byメソッドを使用する。またfind_byメソッドはレコードを最初にヒットした1つしか取らない。

モデル名.find_by(カラム名: '値')

#例 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個までのレコードを取得する。

といった指定ができる。

モデル名.limit( n )

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


members_controller.rb

class MembersController < ApplicationController

def index
@members = Member.limit(3)
end
end


カラムを指定する

指定したカラムのデータを取得する場合。

モデル名.select("カラム名")

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


members_controller.rb

class MembersController < ApplicationController

def index
@members = Member.select("name")
end
end



ビュー側の処理

コントローラから無事ビューにデータが渡されれば、ビューでそれを表示する記述をしてあげることでやっとwebページにデータを表示することができる。

前述したどの形式のデータを渡されたかによって使い方は変わるが、

ここではテーブルごと全てのデータを取得した場合の例を載せておくので、適切な形に変えて使用すること。


指定カラムの中身を全レコード分表示

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


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>


指定したフィールドの中身を表示

取得したデータから番地やカラムを指定して目的のフィールドの中身を表示してみた。

指定の仕方はリストに似ている。

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


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>


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