Railsを用いて、例えば8時間30分などを8.5へ変換するにはどうすれば良いか、考えてみた。
バージョンの確認
Rails:5.1.4
Ruby:ruby 2.4.1p111
手順
ヘルパーモジュールに10段階へ変換させるメソッドを組み込み、表示させたいviewファイルに読み込ませる。
例
Worktimeというモデルが作成されている。
db/schema.rb
create_table "worktimes", force: :cascade do |t|
t.datetime "work_time"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
ヘルパーにメソッドを定義する。
app/helpers/work_times_helper.rb
module WorkTimesHelper
def time_10div(time)
x = time.hour #例えば、8時間30分の8の値へアクセス。
y = time.min #例えば、8時間30分の30の値へアクセス。
y = y/60.to_f #60で割り、to_fメソッドを使用すると、30分→0.5、15分→0.25という値へアクセス出来る。
#to_fメソッドを使用しないと小数点以下の値へアクセス出来ないので注意。
y = y.round(2) #この場合は小数点3桁目を四捨五入している。例)10分→0.17
sum = x + y #最後に加算する。
"#{sum}" #8時間30分→8.5へ変換される。
end
end
コントローラに
app/controllers/work_times_controller.rb
def hoge
@worktime = Worktime.new(work_time: "08:30:00")
end
などと定義して、
app/views/work_times/hoge.html.erb
<%= time_10div(@worktime.work_time) %>
とviewファイルに記載すれば、8.5と表示される。
※routesファイルの編集や時間の設定などは省略。