【開発ログ⑧】社員登録しようとしたら、ウチの会社じゃない支社も出てきた
前提について
はじめまして、 プログラミングスクールに通ういりふねと申します。この記事は、スクールの課題である個人アプリの開発の記録を書くことで、自身のアウトプットに利用しています。もし、読んでいただけた方がいましたら、フィードバックをしていただけたら嬉しいです。
開発するのは「有給休暇管理ツール」です。仕様は過去記事をどうぞ。
アプリはデプロイまで行いますが、サービスとして提供するものではありません。あくまでも自学習の一環ですので、ご理解下さい。では本題へどうぞ。
今回実施する内容
支社登録が実装できたので、続けて社員の登録の実装を行います。社員は必ず1つの支社に所属しています。社員の登録画面のポイントは、ユーザーが登録した支社を選択できるようにすること。逆に他のユーザーが登録した支社は自社に関係なので表示させたくありません。手順は概ね前回の記事と同じなので割愛します。
基本的な実装は完了
作業は、前回とほぼ同じなので順調に進められました。今回は、社員ということで、モデル名はEmployeeとなります。
Rails.application.routes.draw do
devise_for :users
root 'branches#index'
resources :branches, only: [:new, :create]
resources :employees, only: [:new, :create]
end
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
.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'
.main__header
.nav
.ragistation
= link_to new_branch_path, class: "link" do
支社登録
.ragistation
= link_to new_employee_path, class: "link" do
社員登録
〜以下省略〜
結果はちょっと違った
所属支店は、「collection_select」を使ってプルダウンで表示させています。参考にさせていただいたのは、こちらの記事です。すごくわかりやすい記事だったので、ついついそのまま使わせていただいたのですが、
所属支店名に別ユーザーが登録している支店まで表示されてしまいました。下の写真でいうと「薬院支店」と「平尾支店」は表示されてはいけないということになります。
collection_selectのモデル名が原因
原因は、collection_select内のモデル名の設定でした。「Branch.all」になっているので、当然全ての支社が呼び出されてしまうわけですね。whereメソッドを使用して、現在ログイン中のユーザーと同じ「user_id」をもつ支社のみが、表示されるようにコードを変更しました。
ビフォー。
.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: "選択して下さい"
〜以下省略〜
アフター。
.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: "選択して下さい"
〜以下省略〜
再びビューを確認
正しく表示されているかを確認し、なんとか意図通りの見た目になりました。これにて一件落着。
今日の積み上げ
記事を丸ごと移さずに、書かれているコードの意味や自分の作るアプリケーションに合っているかきちんと確認しよう。
Author And Source
この問題について(【開発ログ⑧】社員登録しようとしたら、ウチの会社じゃない支社も出てきた), 我々は、より多くの情報をここで見つけました https://qiita.com/iczo32/items/b61ca8814e2a30aaa91b著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .