演習課題「間違い探し:特定職業のプレイヤーインデックスを表示する」
右の環境には、SinatraとActiveRecordで、特定職業のプレイヤー一覧を表示するプログラムが作成してありますが、正常に動作しません。
間違いを修正して、正しく動作するようにしてください。
採点して、すべてのジャッジに正解すれば、演習課題クリアです!
#08:具体例:特定の職業のプレイヤー一覧を表示する
ここでは、ActiveRecordとSinatraを使って、特定の職業の詳細情報を表示するページを作ります。そして、その職業に属するプレイヤーを表示させます。
playersテーブルの複数の項目に対して、jobsテーブルの1つの項目が対応していることを「多対1」の関係になっていると呼びます。
ActiveRecordで、playersテーブル側にjobsテーブルを結合する場合、これを次のように記述します。class Player < ActiveRecord::Base
belongs_to :job
end
また、jobsテーブル側にplayersテーブルを結合する場合、これを次のように記述します。class Job < ActiveRecord::Base
has_many :players
end
mydb/job_index.rb# 職業別のプレイヤーインデックスを表示する
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
has_many :players
end
get '/' do
@players = Player.all
erb :index
end
get '/jobs/' do
@jobs = Job.all
erb :job_index
end
views/job_index.erb<h1>Job Index</h1>
<% @jobs.each do |job| %>
<p>
<%= job.id %>,
<%= job.job_name %>,
<a href="/job/<%= job.id %>">表示する</a>
</p>
<% end %>
views/job_profile.erb<h1><%= @job.id %>:<%= @job.job_name %>の詳細情報</h1>
<% @job.players.each do |player| %>
<p>
<%= player.id %>,
<%= player.name %>,
<%= player.level %>
</p>
<% end %>
<p><a href="/jobs/">戻る</a></p>
- [「一対一」「一対多」「多対多」のリレーションを分かりやすく説明する - akiyoko blog]
http://akiyoko.hatenablog.jp/entry/2016/07/31/232754
- [Active Record の関連付け (アソシエーション) | Rails ガイド]
https://railsguides.jp/association_basics.html
- [Active Record の基礎 | Rails ガイド]
https://railsguides.jp/active_record_basics.html#%E3%82%B9%E3%82%AD%E3%83%BC%E3%83%9E%E3%81%AE%E3%83%AB%E3%83%BC%E3%83%AB
- [Active Record クエリインターフェイス | Rails ガイド]
https://railsguides.jp/active_record_querying.html