【実現したいこと】
*モーダルのテーブルを表示したい。
【現状】
*モーダル自体は出るが、form_with〜テーブルのレコードを入れると、ターミナルに下記の様なエラーが出る
ActionView::Template::Error (No route matches {:action=>"update_overtime_request", :controller=>"attendances", :id=>nil, :user_id=>"15"}, missing required keys: [:id]):
*エラー画面*
【試みたこと】
●エラー文から、form_withに問題があるのではと考察
●routes.rbでmember do にしているかを確認
●form_withのパスを確認
●veiwにdebuggerを入れ、@attendanceの値や配列、ブロック変数は取れている。
●controllerにdebuggerを入れ、attendance = nilを確認。edit_overtime_requestの値を確認。
●form_with〜eddまでをコメントにすると、モーダルは出ることを確認
●考察により、attendance自体は取れているのではないか?何故nilが返るかが分かりかねています。
*検討が付かないので、関連のあるファイルを添付させて頂きます。
お忙しい中お手数おかけしますが、解決の術を教えて頂けないでしょうか。
宜しくお願い致します。
*デバッグ結果(attendances/_edit_overtime_request.html.erb)*
*デバッグ結果(attendances_controller)*
*ブラウザ画面(残業申請のボタンを押すとattendanceのレコードをテーブルにしたモーダルを出したい)*
*ブラウザ(現状)*
*_edit_overtime_request.html.erb(form_with部分コメント化)*
erb
1<div class="modal-dialog modal-lg modal-dialog-center"> 2 <div class="modal-content"> 3 <div class="modal-header"> 4 <button type="button" class="close" data-dismiss="modal" aria-label="Close"> 5 <span aria-hidden="true">×</span> 6 </button> 7 <h1 class="modal-title">残業申請</h1> 8 </div> 9 <div class="modal-body"> 10 <% 11=begin%> 12 <%= form_with(model: @attendance , url: update_overtime_request_user_attendance_path(@user, @attendance) , method: :patch , local: true) do |f| %> 13 <table class="table table-bordered table-condensed overtime-table"> 14 <thead> 15 <th>日付</th> 16 <th>曜日</th> 17 <th>終了予定時間</th> 18 <th>翌日</th> 19 <th>業務処理内容</th> 20 <th>指示者確認 21 <div class="maru size_small black"> 22 <div class="letter3">印</div> 23 </div> 24 </th> 25 </thead> 26 <tbody> 27 <% css_class = 28 case $days_of_the_week[@attendance.worked_on.wday] 29 when '土' 30 'text-primary' 31 when '日' 32 'text-danger' 33 end 34 %> 35 <td><%= l(@attendance.worked_on, format: :short) %></td> 36 <td class="<%= css_class %>"><%= $days_of_the_week[@attendance.worked_on.wday] %></td> 37 <td><%= f.time_select :overtime_finished_at,{class: "form-control bootstrap-date-only-width"} %></td> 38 <td><%= f.check_box :tomorrow,id: "tomorrow" %></td> 39 <td><%= f.text_field :overtime_work, class:"form-control" %></td> 40 <td><%= f.select :indicater_check,{'なし':1, '申請中':2, '承認':3, '否認':4},{ class: 'form-control input-sm' , required: true } %></td> 41 </tbody> 42 </table> 43 <%= f.submit "変更を送信する", class: "btn btn-primary btn-block" %> 44 <% debugger %> 45 <% end %> 46<% 47=end%> 48 49 </div> 50 </div> 51</div>
*edit_overtime_request.html.erb(これだとモーダルは出ず、エラー)*
erb
1<div class="modal-dialog modal-lg modal-dialog-center"> 2 <div class="modal-content"> 3 <div class="modal-header"> 4 <button type="button" class="close" data-dismiss="modal" aria-label="Close"> 5 <span aria-hidden="true">×</span> 6 </button> 7 <h1 class="modal-title">残業申請</h1> 8 </div> 9 <div class="modal-body"> 10 <%= form_with(model: @attendance , url: update_overtime_request_user_attendance_path(@user, @attendance) , method: :patch , local: true) do |f| %> 11 <table class="table table-bordered table-condensed overtime-table"> 12 <thead> 13 <th>日付</th> 14 <th>曜日</th> 15 <th>終了予定時間</th> 16 <th>翌日</th> 17 <th>業務処理内容</th> 18 <th>指示者確認 19 <div class="maru size_small black"> 20 <div class="letter3">印</div> 21 </div> 22 </th> 23 </thead> 24 <tbody> 25 <% css_class = 26 case $days_of_the_week[@attendance.worked_on.wday] 27 when '土' 28 'text-primary' 29 when '日' 30 'text-danger' 31 end 32 %> 33 <td><%= l(@attendance.worked_on, format: :short) %></td> 34 <td class="<%= css_class %>"><%= $days_of_the_week[@attendance.worked_on.wday] %></td> 35 <td><%= f.time_select :overtime_finished_at,{class: "form-control bootstrap-date-only-width"} %></td> 36 <td><%= f.check_box :tomorrow,id: "tomorrow" %></td> 37 <td><%= f.text_field :overtime_work, class:"form-control" %></td> 38 <td><%= f.select :indicater_check,{'なし':1, '申請中':2, '承認':3, '否認':4},{ class: 'form-control input-sm' , required: true } %></td> 39 </tbody> 40 </table> 41 <%= f.submit "変更を送信する", class: "btn btn-primary btn-block" %> 42 <% debugger %> 43 <% end %> 44 45 </div> 46 </div> 47</div>
*routes.rb*
rb
1Rails.application.routes.draw do 2 3 root 'static_pages#top' 4 5 get '/signup', to: 'users#new' 6 get '/login', to: 'sessions#new' 7 post '/login', to: 'sessions#create' 8 delete '/logout', to: 'sessions#destroy' 9 10 resources :bases 11 resources :users do 12 collection { post :import } 13 member do 14 get 'edit_basic_info' 15 patch 'update_basic_info' 16 patch 'update_index' 17 get 'attendances/edit_one_month' 18 patch 'attendances/update_one_month' 19 end 20 collection do 21 get 'working' 22 end 23 resources :attendances, only: [:update] do 24 member do 25 # 残業申請モーダル 26 get 'edit_overtime_request' 27 patch 'update_overtime_request' 28 end 29 end 30 end 31 32end 33
*user/show.html.erb*
erb
1 2 <tbody tbody class="line"> 3 <% @attendances.each do |day| %> 4 <% css_class = 5 case $days_of_the_week[day.worked_on.wday] 6 when '土' 7 'text-primary' 8 when '日' 9 'text-danger' 10 end 11 %> 12 13 <tr> 14 <td><%= link_to "残業申請", edit_overtime_request_user_attendance_path(@user , day), remote: true , class: "btn btn-primary" %></td> 15 <td><%= l(day.worked_on, format: :short) %></td> 16 <td class="<%= css_class %>"><%= $days_of_the_week[day.worked_on.wday] %></td> 17 <td><%= l(day.started_at,format: :hour) if day.started_at.present? %></td> 18 <td><%= l(day.started_at,format: :minute) if day.started_at.present? %></td> 19 20 <td><% if btn_text = attendance_state_start(day) %> 21 <%= link_to "#{btn_text}登録", user_attendance_path(@user, day), method: :patch, class: "btn btn-primary btn-attendance" %> 22 <% end %> 23 </td> 24 25
*attendances_controller*
rb
1def edit_overtime_request 2 @user = User.find(params[:user_id]) 3 @attendance = @user.attendances.find(params[:id]) 4 5 end 6 7 8 def update_overtime_request 9 @user = User.find(params[:user_id]) 10 @attendance = @user.attendances.find(params[:id]) 11 end
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。