前提・実現したいこと
現在勤怠管理アプリを作成しています
勤怠情報を年月ごとに管理しようと思い検索機能を付けたのですが上手くいきません
メソッド自体は動きパラメータは送信出来ているのですがerbが表示を更新してくれないという状況です
該当のソースコード
usershowerb
1<%= form_with url: user_path, method: :get do |form| %> 2<%= form.text_field :year %> 3<%= form.text_field :month %> 4<%= form.submit %> 5<% end %> 6<table class="table table-bordered.table-condensed"> 7 <thead> 8 <tr> 9 <th>月</th> 10 <th>勤務地</th> 11 <th>出勤時間</th> 12 <th>退勤時間</th> 13 <th>勤務時間</th> 14 <th>残業時間</th> 15 </tr> 16 </thead> 17 <%@attendances.each do |attendance|%> 18 <% working_times = attendance.working_times.divmod(60) if attendance.working_times %> 19 <% overtime_hours = attendance.overtime_hours.divmod(60) if attendance.overtime_hours %> 20 <tbody> 21 <tr> 22 <td><%=attendance.month%></td> 23 <td><%=attendance.working_place%></td> 24 <td><%=attendance.attendance_time.strftime("%H:%M")%></td> 25 <td><%=attendance.leaving_time.strftime("%H:%M")%></td> 26 <td><%="#{working_times[0]}h#{working_times[1]}m" if attendance.working_times%></td> 27 <td><%="#{overtime_hours[0]}h#{overtime_hours[1]}m" if attendance.overtime_hours%></td> 28 </tr> 29 <%end%> 30 </tbody> 31</table> 32
controller
1class UsersController < ApplicationController 2 3 def show 4 @user = User.find(params[:id]) 5 @attendances = Attendance.search(@user.id,params[:year],params[:month]) 6 end 7end 8
model
1class Attendance < ApplicationRecord 2 belongs_to :user 3 class << self 4 5 def self.search(user,year,month) 6 if year.blank? || month.blank? 7 return Attendance.where(user:user,year:Date.today.year,month: Date.today.month).order(:day) 8 else 9 return Attendance.where(user:user,year:year,month:month).order(:day) 10 end 11 end 12end
こちらは検索後erbでのデバッグログです
ログを見ると検索結果が返ってきているのにもかかわらずerbは更新されず
更新前の値を表示しています
pry
1Started GET "/users/2?year=2021&month=4&commit=Submit%20" for ::1 at 2021-03-18 22:52:58 +0900 2 (0.1ms) SELECT sqlite_version(*) 3Processing by UsersController#show as JS 4 Parameters: {"year"=>"2021", "month"=>"4", "commit"=>"Submit ", "id"=>"2"} 5 User Load (0.2ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT ? [["id", 2], ["LIMIT", 1]] 6 ↳ app/controllers/users_controller.rb:8:in `show' 7 Rendering users/show.html.erb within layouts/application 8 9From: /home/kanta/workspace/Mizuho/app/views/users/show.html.erb:6 #<Class:0x00007f5e0c4a86b8>#_app_views_users_show_html_erb__612417191424217019_72260: 10 11 1: <%= form_with url: user_path, method: :get do |form| %> 12 2: <%= form.text_field :year %> 13 3: <%= form.text_field :month %> 14 4: <%= form.submit %> 15 5: <% end %> 16 => 6: <%binding.pry%> 17 7: <table class="table table-bordered.table-condensed"> 18 8: <thead> 19 9: <tr> 20 10: <th>月</th> 21 11: <th>勤務地</th> 22 23[2] pry(#<#<Class:0x00007f5e0c4a84d8>>)> @attendances 24 Attendance Load (0.5ms) SELECT "attendances".* FROM "attendances" WHERE "attendances"."user_id" = ? AND "attendances"."year" = ? AND "attendances"."month" = ? ORDER BY "attendances"."day" ASC [["user_id", 2], ["year", 2021], ["month", 4]] 25 ↳ app/views/users/show.html.erb:6 26=> [#<Attendance:0x00005598f08202d8 27 id: 31, 28 user_id: 2, 29 attendance_time: Sun, 02 Jan 2000 06:00:00 JST +09:00, 30 leaving_time: Sat, 01 Jan 2000 16:00:00 JST +09:00, 31 created_at: Thu, 18 Mar 2021 20:17:46 JST +09:00, 32 updated_at: Thu, 18 Mar 2021 20:17:46 JST +09:00, 33 working_times: 480, 34 working_place: "滋賀県大阪市平野区新上条", 35 year: 2021, 36 month: 4, 37 day: 1, 38 overtime_hours: 120>, 39 40......
こちらはパラメータ送信後の実際の画面です
デバッグログの@attendancesと異なるデータが表示されているのが分かります
エラーログが出るわけでもないので原因がわからず手詰まり状態となっております
知恵を貸していただけると嬉しいです
補足情報(FW/ツールのバージョンなど)
rails 6.0.3.5
ruby 2.7.2p137 (2020-10-01 revision 5445e04352) [x86_64-linux]
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。