質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

1回答

1686閲覧

ActionView::Template::Errorが解決できません

RThe

総合スコア25

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2020/10/01 08:35

【実現したいこと】
*モーダルのテーブルを表示したい。
【現状】
*モーダル自体は出るが、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が返るかが分かりかねています。

*検討が付かないので、関連のあるファイルを添付させて頂きます。
お忙しい中お手数おかけしますが、解決の術を教えて頂けないでしょうか。
宜しくお願い致します。

*デバッグ結果(user/show.html.erb)*
イメージ説明

*デバッグ結果(attendances/_edit_overtime_request.html.erb)*
イメージ説明

*デバッグ結果(attendances_controller)*

イメージ説明

イメージ説明

*ブラウザ画面(残業申請のボタンを押すとattendanceのレコードをテーブルにしたモーダルを出したい)*

イメージ説明

*ブラウザ(現状)*

イメージ説明

*rails/info*
イメージ説明

*_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">&times;</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">&times;</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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

1つ1つのコードを確認したところ、@が一部全角になっていました。

投稿2020/10/03 11:34

RThe

総合スコア25

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問