LoginSignup
1
1

More than 5 years have passed since last update.

Ruby on Railsにて時間を10段階で表示する方法

Posted at

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ファイルの編集や時間の設定などは省略。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1