パラメーターを配列にして、指定した件数をupdateする処理で詰まっています。
◎ やりたいこと:予定件数が予約可能件数を上回れば全てエラーとなり、updateしない。
(その際入力した値は保持)
◎現状:エラーは出るが、予約可能件数分は登録されてしまう(予約可能件数が2として、3予約した場合2件はupdateされてしまう)
お手数おかけしますが、達成方法を教えて頂けないでしょうか。
before_action :set_one_month, only: [:edit,:update] def update @user = User.find(current_user.id) @booking = @user.bookings.where.not(start: nil).where(date: @first_day..@last_day) #⬆︎予約申請日を1か月から特定 @contact = @user.contact #⬆︎ 予約可能件数 ActiveRecord::Base.transaction do b1 = 0 booking_params.each do |id,item| booking = Booking.find(id) # 条件1 リクエストにチェックがされていること if item[:request] == "1" # 条件2 時刻が空でないこと if item[:start].blank? && item[:end].blank? flash[:alert] = "空白の時間が見つかりました。" redirect_to @user and return elsif # 条件3 時刻が正しいこと item[:start] >= item[:end] flash[:alert] = "設定時間に誤りがあります" redirect_to @user and return # 条件4 予約件数が可能件数を上回らないこと elsif @booking.count>= @contact flash[:alert] = "可能件数以上の予約はできません" render :edit and return end r1 += 1 booking.update!(item) end end if b1 > 0 flash[:notice] = "受付を#{b1}件申請しました" redirect_to @user else flash[:alert] = "「申請」にチェックを入れて下さい。" redirect_to @user and return end end rescue ActiveRecord::RecordInvalid flash[:alert] = "無効な入力データがあった為、更新をキャンセルしました。" redirect_to redirect_to @user end private def booking_params params.require(:user).permit(bookings:[:request, :start, :end, :remarks])[:bookings] end end
<% @bookings.each do |day| %> <%= f.fields_for "bookings[]", day do |rb| %> <% css_class = case $days_of_the_week[day.date.wday] when '土' 'text-primary' when '日' 'text-danger' end %> <td><%= r.check_box :request, {checked: false, class: "sample"} %></td> <td><%= l(date, format: :short) %></td> <td class="<%= css_class %>"><%= $days_of_the_week[day.date_of_use.wday] %></td> <td><%= r.time_field :start,{ class: "form-control input-sm"}%></td> <td><%= r.time_field :end_time,{ class: "form-control input-sm" } %></td> <td><%= r.text_field :remarks, class: "form-control" %></td> <% end %> <% end %>
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/03/19 09:03
2021/03/19 09:07
2021/03/19 09:15
2021/03/19 09:22
2021/03/19 09:27