🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails 6

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

Q&A

解決済

1回答

963閲覧

Rails viewからのリクエストでcontrollerから変数を変更した後、静的でいいのでViewの内容を更新したい

sya_hadakatanki

総合スコア1

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails 6

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

0グッド

0クリップ

投稿2021/03/18 14:04

編集2021/03/18 15:20

前提・実現したいこと

現在勤怠管理アプリを作成しています
勤怠情報を年月ごとに管理しようと思い検索機能を付けたのですが上手くいきません
メソッド自体は動きパラメータは送信出来ているのですが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]

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

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

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

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

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

guest

回答1

0

自己解決

詳細は分かりませんがform_withをform_tagにしたら動きました

投稿2021/03/18 15:41

sya_hadakatanki

総合スコア1

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問