演習課題「Playerインデックスにvitalityを表示する」
右の環境には、SinatraとActiveRecordで、MySQLからPlayersテーブルのデータを表示するプログラムが作成してあります。Player一覧画面に、Jobsテーブルのvitalityカラムを追加表示してください。
採点して、すべてのジャッジに正解すれば、演習課題クリアです!
#06:ActiveRecordでテーブルを連結してデータを取り出す
ここでは、ActiveRecordでテーブルを連結してデータを取り出す方法を学習します。
サンプルデータベースで、「players」テーブルの「job_id」と「jobs」テーブルの「id」を結合します。
playersテーブルの複数の項目に対して、jobsテーブルの1つの項目が対応していることを「多対1」の関係になっていると呼びます。
ActiveRecordで、playersテーブル側にjobsテーブルを結合する場合、これを次のように記述します。class Player < ActiveRecord::Base
    belongs_to :job
end
# ActiveRecordでテーブルを連結
require 'mysql2'
require 'active_record'
require 'sinatra'
require 'sinatra/reloader'
require 'erb'
ActiveRecord::Base.configurations = YAML.load_file('database.yml')
ActiveRecord::Base.establish_connection(:development)
class Player < ActiveRecord::Base
    belongs_to :job
end
class Job < ActiveRecord::Base
end
get '/' do
    @players = Player.all
    erb :index
end
/views/index.erb<h1>Players index</h1>
<table>
    <tr>
        <th>id</th><th>名前</th><th>レベル</th><th>職業</th>
    </tr>
    <% @players.each do |player| %>
        <tr>
            <td><%= player.id %></td>
            <td><%= player.name %></td>
            <td><%= player.level %></td>
            <td><%= player.job.job_name %></td>
        </tr>
    <% end %>
</table>
- [「一対一」「一対多」「多対多」のリレーションを分かりやすく説明する - akiyoko blog]
http://akiyoko.hatenablog.jp/entry/2016/07/31/232754
- [Active Record の関連付け (アソシエーション) | Rails ガイド]
https://railsguides.jp/association_basics.html