LoginSignup
1
0

More than 3 years have passed since last update.

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

Posted at

前提について

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

開発するのは「有給休暇管理ツール」です。仕様は過去記事をどうぞ。

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

今回実施する内容

支社登録が実装できたので、続けて社員の登録の実装を行います。社員は必ず1つの支社に所属しています。社員の登録画面のポイントは、ユーザーが登録した支社を選択できるようにすること。逆に他のユーザーが登録した支社は自社に関係なので表示させたくありません。手順は概ね前回の記事と同じなので割愛します。

基本的な実装は完了

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

routes.rb
Rails.application.routes.draw do
  devise_for :users
  root 'branches#index'
  resources :branches, only: [:new, :create] 
  resources :employees, only: [:new, :create]
end
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
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'
_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」を使ってプルダウンで表示させています。参考にさせていただいたのは、こちらの記事です。すごくわかりやすい記事だったので、ついついそのまま使わせていただいたのですが、
所属支店名に別ユーザーが登録している支店まで表示されてしまいました。下の写真でいうと「薬院支店」と「平尾支店」は表示されてはいけないということになります。
スクリーンショット 2020-05-12 19.09.59.png

collection_selectのモデル名が原因

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

ビフォー。

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: "選択して下さい"
       〜以下省略〜

アフター。

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: "選択して下さい"
       〜以下省略〜

再びビューを確認

正しく表示されているかを確認し、なんとか意図通りの見た目になりました。これにて一件落着。
スクリーンショット 2020-05-12 19.10.26.png

今日の積み上げ

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

1
0
0

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
1
0