【開発ログ⑧】社員登録しようとしたら、ウチの会社じゃない支社も出てきた

# 前提について
はじめまして、 プログラミングスクールに通ういりふねと申します。この記事は、スクールの課題である個人アプリの開発の記録を書くことで、自身のアウトプットに利用しています。もし、読んでいただけた方がいましたら、フィードバックをしていただけたら嬉しいです。

開発するのは「有給休暇管理ツール」です。仕様は[過去記事](https://qiita.com/iczo32/items/97ad7d4baa985b3b99ca)をどうぞ。

アプリはデプロイまで行いますが、サービスとして提供するものではありません。あくまでも自学習の一環ですので、ご理解下さい。では本題へどうぞ。

# 今回実施する内容
支社登録が実装できたので、続けて社員の登録の実装を行います。社員は必ず１つの支社に所属しています。社員の登録画面のポイントは、ユーザーが登録した支社を選択できるようにすること。逆に他のユーザーが登録した支社は自社に関係なので表示させたくありません。手順は概ね[前回の記事](https://qiita.com/iczo32/items/6014cf45afd07b3261a8)と同じなので割愛します。

# 基本的な実装は完了
作業は、前回とほぼ同じなので順調に進められました。今回は、社員ということで、モデル名はEmployeeとなります。

```ruby:routes.rb
Rails.application.routes.draw do
  devise_for :users
  root 'branches#index'
  resources :branches, only: [:new, :create] 
  resources :employees, only: [:new, :create]
end
```

```ruby:employees_controller.rb
class EmployeesController < ApplicationController
  def new
    @employee = Employee.new
  end
  def create
    Employee.create(employee_params)
    redirect_to root_path
  end
  private
  def employee_params
    params.require(:employee).permit(:name, :employment_status, :hire_date, :branch_id)
  end
end
```

```haml:new.hyml.haml
.employee__body
  新規社員登録
  .employee__body__form
    = form_for @employee do |f|
      .field
        .field-label
          = f.label "名前"
        .field-input
          = f.text_field :name, autofocus: true
      .field
        .field-label
          = f.label "雇用形態"
        .field-input
          = f.select :employment_status, [["フルタイム", "1"],["パートタイム", "2"]], include_blank: "選択して下さい"
      .field
        .field-label
          = f.label "入社日"
        .field-input
          = f.date_select :hire_date
      .field
        .field-label
          = f.label "所属支店"
        .field-input
          = f.collection_select :branch_id, Branch.all, :id, :name, include_blank: "選択して下さい"
      .actions
        = f.submit "登録", action: :create, class: 'btn'
```

```haml:_mainheader.html.haml
.main__header
  .nav
    .ragistation
      = link_to new_branch_path, class: "link" do
        支社登録
    .ragistation
      = link_to new_employee_path, class: "link" do
        社員登録
　　　　　　　　　〜以下省略〜
```

# 結果はちょっと違った
所属支店は、「collection_select」を使ってプルダウンで表示させています。参考にさせていただいたのは、[こちらの記事](https://qiita.com/kawakami_shotaro/items/11a677bf34136cb7686d)です。すごくわかりやすい記事だったので、ついついそのまま使わせていただいたのですが、
所属支店名に別ユーザーが登録している支店まで表示されてしまいました。下の写真でいうと「薬院支店」と「平尾支店」は表示されてはいけないということになります。
<img width="304" alt="スクリーンショット 2020-05-12 19.09.59.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614723/2e564e31-a5e8-ac17-615d-0bc2d48a8df9.png">

# collection_selectのモデル名が原因
原因は、collection_select内のモデル名の設定でした。「Branch.all」になっているので、当然全ての支社が呼び出されてしまうわけですね。whereメソッドを使用して、現在ログイン中のユーザーと同じ「user_id」をもつ支社のみが、表示されるようにコードを変更しました。

ビフォー。

```haml:new.hyml.haml
.employee__body
  新規社員登録
  .employee__body__form
    = form_for @employee do |f|
　　　　　　　　〜中略〜
      .field
        .field-label
          = f.label "所属支店"
        .field-input
          = f.collection_select :branch_id, Branch.all, :id, :name, include_blank: "選択して下さい"
　　　　　　　〜以下省略〜
```

アフター。

```haml:new.hyml.haml
.employee__body
  新規社員登録
  .employee__body__form
    = form_for @employee do |f|
　　　　　　　　〜中略〜
      .field
        .field-label
          = f.label "所属支店"
        .field-input
          = f.collection_select :branch_id, Branch.where(user_id: current_user.id), :id, :name, include_blank: "選択して下さい"
　　　　　　　〜以下省略〜
```

# 再びビューを確認
正しく表示されているかを確認し、なんとか意図通りの見た目になりました。これにて一件落着。
<img width="275" alt="スクリーンショット 2020-05-12 19.10.26.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614723/50a7240c-7a32-950f-6f48-a982b884b083.png">

# 今日の積み上げ
記事を丸ごと移さずに、書かれているコードの意味や自分の作るアプリケーションに合っているかきちんと確認しよう。