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

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

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

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

Q&A

解決済

1回答

850閲覧

時間の計算がうまく行きません

RThe

総合スコア25

Ruby on Rails 5

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

0グッド

0クリップ

投稿2020/10/10 00:34

編集2020/10/10 08:59

Userモデルのdesignation_work_end_time(指定勤務終了時間)と
attendanceモデルのovertime_finished_at(残業終了時間)を使用し、下記の計算式
overtime_work(時間外) = overtime_finished_at - designation_work_end_timeの計算で表示したいのですが、うまく表示されません。エラーも出ない状況ですのでつまづいてしまいました。。。。

お手数おかけしますが、解決策を教えていただけると幸いです。

*attendansces_helper*

rb

1# 時間外時間 2 def overtime_worked_on(overtime_finished_at, designation_work_end_time) 3 format("%.2f", (((overtime_finished_at - designation_work_end_time) / 60) / 60.0)) 4 end

*attendanceのモーダル*

erb

1<% attendance.each do |day| %> 2 <%= f.fields_for "attendance[]", day do |d| %> 3 4 <tbody class="line"> 5 <% css_class = 6 case $days_of_the_week[day.worked_on.wday] 7 when '土' 8 'text-primary' 9 when '日' 10 'text-danger' 11 end 12 %> 13 <td><%= l(day.worked_on, format: :short) %></td> 14 <td class="<%= css_class %>"><%= $days_of_the_week[day.worked_on.wday] %></td> 15 16 ↓ここに表示したい 17 <td>overtime_worked_on(day.overtime_finished_at, user.designation_work_end_time)</td> 18 19 </tbody> 20 21 <% end %> 22 <% end %>

*該当個所のスキーマ*

rb

1create_table "attendances", force: :cascade do |t| 2t.datetime "overtime_worked_on" 3 4create_table "users", force: :cascade do |t| 5t.datetime "designation_work_end_time", default: "2020-10-08 09:00:00"

*現在の表示*

イメージ説明

宜しくお願い致します。

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

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

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

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

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

firegrape

2020/10/10 01:12

うまく表示されませんとのことですが、 現状だとどう表示されますか?
RThe

2020/10/10 02:36

現在は、スクショのように空白で表示されます。 エラーにはならないので、debuggerで考察が出来ませんでした・・・
firegrape

2020/10/10 02:40

何も表示されないときは、計算以前の問題なので まずは必ず表示される値を表示してみるのが定石です。
RThe

2020/10/10 03:05

承知いたしました。 一度再検討してみます。 ありがとうございました。
guest

回答1

0

ベストアンサー

質問とcodeが乖離していて???です
「下記の計算式 。。。。の計算で表示」とある式は helperに定義したものの様です。
その overtime_worked_on が 「↓ここに表示したい」に使われていません。
あるのは day.overtime_work 

overtime_work へデータを入れる前に表示しているのでは? だからデータは nil 表示は空白です。
overtime_finished_at を設定した時に、同時に overtime_work を計算して入れておくようにしてみて

投稿2020/10/10 05:08

winterboum

総合スコア23567

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

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

RThe

2020/10/10 06:14

ご回答ありがとうございます。 ご指定通り、ヘルパーではovertime_worked_onを定義したので、 viewを <%= day.overtime_work%>ではなく <%= day.overtime_worked_on %>にしましたが、 結果は変わらずです。。。 考え方が違っているのですかね。。。
winterboum

2020/10/10 09:56

間違ってますね。 そのhelperはdayのmethodではないです
RThe

2020/10/10 23:10

承知致しました! いちど、methodを考え直してみます。 教えて下さり、ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問