前提・実現したいこと
初めての質問で、趣旨がちゃんと伝わってなければすいません。
現在、勤怠管理アプリを開発しているのですが、
update_one_monthというアクションを行う際に
「出社、または退社のみを入力した際のデータ更新」というアクションが
実行されないように実装したいです。
発生している問題・エラーメッセージ
started_atとfinished_atがそれぞれに入力がされていない 場合は、更新させないとコード打ったのですが これが、逆に問題になってしまい。 当日の出勤データも更新できなくなってしまっています。
class AttendancesController < ApplicationController
before_action :set_user, only: [:edit_one_month, :update_one_month]
before_action :logged_in_user, only: [:update, :edit_one_month]
before_action :admin_or_correct_user, only: [:update, :edit_one_month, :update_one_month]
before_action :set_one_month, only: :edit_one_month
UPDATE_ERROR_MSG = "勤怠登録に失敗しました。やり直してください。"
def update
@user = User.find(params[:user_id])
@attendance = Attendance.find(params[:id])
# 出勤時間が未登録であるのかを判断する
if @attendance.started_at.nil?
if @attendance.update_attributes(started_at: Time.current.change(sec: 0))
flash[:info] = "おはようございます!"
else
flash[:danger] = UPDATE_ERROR_MSG
end
elsif @attendance.finished_at.nil?
if @attendance.update_attributes(finished_at: Time.current.change(sec: 0))
flash[:info] = "お疲れさまでした。"
else
flash[:danger] = UPDATE_ERROR_MSG
end
end
redirect_to @user
end
def edit_one_month
end
def update_one_month
ActiveRecord::Base.transaction do # トランザクションを開始
attendances_params.each do |id, item|
attendance = Attendance.find(id)
attendance.update_attributes!(item)
end
end
flash[:success] = "1ヶ月分の勤怠情報を更新しました。"
redirect_to user_url(date: params[:date])
rescue ActiveRecord::RecordInvalid # トランザクションによるエラーの分岐
flash[:danger] = "無効なデータがあった為、更新をキャンセルしました。"
redirect_to attendances_edit_one_month_user_url(date: params[:date])
end
private
# 1ヶ月分の勤怠情報 def attendances_params params.require(:user).permit(attendances: [:started_at, :finished_at, :note])[:attendances] end # before action関連 def admin_or_correct_user @user = User.find(params[:user_id]) if @user.blank? unless current_user?(@user) || current_user.admin? flash[:danger] = "編集権限がありません。" redirect_to(root_url) end end
end
ソースコード
### 試したこと 最初は、started_atが存在しない、かつfinished_atが存在しない時には 更新しないという風に書いたのですが、 そうなると、showページでの出社ボタンもバリテーションが かかってしまうという状況です。 ### 補足情報(FW/ツールのバージョンなど) Ruby On Rails Rails 5.1.7
回答2件
あなたの回答
tips
プレビュー