中間テーブルを用いた多対多の関係(その 3)

今度は License の側から Employee のリストを取得してみましょう。

rails g controller licenses index

app/views/licenses/index.html.erb

<h1>資格取得者一覧</h1>
<table border>
  <thead>
    <tr><th>資格</th><th>取得者</th></tr>
  </thead>
  <tbody>
    <% @licenses.each do |l| %>
    <tr>
      <td><%= l.name %></td>
      <td><%= l.employees.empty? ? 'なし' : l.employees.map{ |e| e.name }.join(',') %></td>
    </tr>
    <% end %>
  </tbody>
</table>

config/routes.rb

Sample2::Application.routes.draw do
  resources :employees
  resources :licenses
  # (略)
end

再びサーバを起動して http://localhost:3000/licenses にアクセスしてみましょう。

こちらも中間テーブルを通して対応するリストが取得できました。

さて、今回使った has_and_belongs_to_many は、中間テーブルが外部キー以外を持たない場合にしか使えません。そうでない場合にどうするか、ということを次回以降に書いていきたいと思います。