LoginSignup
117
130

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-08-07

コントローラ側の処理

まず、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を持つレコードを受け取ることができる。
スクリーンショット 2018-08-08 0.23.29.png

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>

スクリーンショット 2018-08-08 1.12.31.png

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

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

下記では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>

スクリーンショット 2018-08-08 1.19.26.png


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

117
130
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
117
130