現在、タイムカードアプリを作成しております。
下記のスクショのように、日毎の出勤と退勤時刻を入力し、「編集を保存する」を押すと1ヶ月の勤務時間が反映される内容です。
出勤日以外は、空欄のまま出力したいのですが、空欄のまま「編集を保存する」を押すと自動的に「00:00」となってしまい、
出社したことになってしまいます。
空欄をそのまま反映するにはtime_selectをどの様にしたら良いのでしょうか。
お忙しい中、お手数おかけしますが、教えていただけると幸いです。
*タイムカード1月更新ページ(白紙)*
・モデル→attendance
・カラム→started_at(出勤時刻),finished_at(退勤時刻),note(備考)
*edit_one_month_html.erb*
erb
1<td><%= attendance.time_select :started_at, {include_blank: true}, {class: "form-control bootstrap-date-only-width"} %></td> 2<td><%= attendance.time_select :finished_at, {include_blank: true}, {class: "form-control bootstrap-date-only-width"} %></td>
*attendances_controller*
rb
1 def edit_one_month 2 end 3 4 def update_one_month 5 ActiveRecord::Base.transaction do # トランザクションを開始します。 6 attendances_params.each do |id, item| 7 attendance = Attendance.find(id) 8 attendance.update_attributes!(item) 9 end 10 end 11 flash[:success] = "1ヶ月分の勤怠情報を更新しました。" 12 redirect_to user_url(date: params[:date]) 13 rescue ActiveRecord::RecordInvalid # トランザクションによるエラーの分岐です。 14 flash[:danger] = "無効な入力データがあった為、更新をキャンセルしました。" 15 redirect_to attendances_edit_one_month_user_url(date: params[:date]) 16 end 17 18 19 20private 21 # 1ヶ月分の勤怠情報を扱います。 22 def attendances_params 23 params.require(:user).permit(attendances: [:started_at, :finished_at, :note])[:attendances] 24 end 25 end 26
*schema*
rb
1class CreateAttendances < ActiveRecord::Migration[5.2] 2 def change 3 create_table :attendances do |t| 4 t.date :worked_on 5 t.datetime :started_at 6 t.datetime :finished_at 7 t.string :note 8 t.references :user, foreign_key: true 9 10 t.timestamps 11 end 12 end 13end 14
*attendaceモデルファイル*
rb
1class Attendance < ApplicationRecord 2 belongs_to :user 3 4 validates :worked_on, presence: true 5 validates :note, length: { maximum: 50 } 6 7 validate :finished_at_is_invalid_without_a_started_at 8 validate :started_at_than_finished_at_fast_if_invalid 9 10 def finished_at_is_invalid_without_a_started_at 11 errors.add(:started_at, "が必要です") if started_at.blank? && finished_at.present? 12 end 13 14 def started_at_than_finished_at_fast_if_invalid 15 if started_at.present? && finished_at.present? 16 errors.add(:started_at, "より早い退勤時間は無効です") if started_at > finished_at 17 end 18 end 19end 20
宜しくお願い致します。
あなたの回答
tips
プレビュー