Using a duration field in a Rails model

前端 未结 4 1176
温柔的废话
温柔的废话 2021-01-30 07:00

I\'m looking for the best way to use a duration field in a Rails model. I would like the format to be HH:MM:SS (ex: 01:30:23). The database in use is sqlite locally and Postgr

4条回答
  •  无人共我
    2021-01-30 07:58

    • Store as integers in your database (number of seconds, probably).
    • Your entry form will depend on the exact use case. Dropdowns are painful; better to use small text fields for duration in hours + minutes + seconds.
    • Simply run a SUM query over the duration column to produce a grand total. If you use integers, this is easy and fast.

    Additionally:

    • Use a helper to display the duration in your views. You can easily convert a duration as integer of seconds to ActiveSupport::Duration by using 123.seconds (replace 123 with the integer from the database). Use inspect on the resulting Duration for nice formatting. (It is not perfect. You may want to write something yourself.)
    • In your model, you'll probably want attribute readers and writers that return/take ActiveSupport::Duration objects, rather than integers. Simply define duration=(new_duration) and duration, which internally call read_attribute / write_attribute with integer arguments.

提交回复
热议问题