开发者

How to store length of time in a model with Rails?

开发者 https://www.devze.com 2023-02-21 15:38 出处:网络
I can think of two solutions: 1) Store hours, minutes, seconds, etc. in separate columns in the database

I can think of two solutions:

1) Store hours, minutes, seconds, etc. in separate columns in the database

  • Downside: a lot of columns

2) Convert and store the number of seconds

  • We still want to be able to show seperate fields for hour, minute, s开发者_C百科econd, etc. in the form. We could write virtual attribute for each of these and write a before_save callback that converts the timespan to seconds (still messy tho).

Am I missing some other obvious solution? How do you people do this?


I vote for a single column to keep track of durations. That keeps the duration normalized, whereas you'll need to do almost as much work or more to normalize multi-column durations.

Rails (activesupport) also gives you wonderful methods to work with time. For example, if your duration is in seconds, you can easily add the duration in seconds to a point in time and get an end time:

end_time = Time.now + duration_in_secs

It is a bit more work using virtual attributes to separate it out, but in my experience, it's not that more work. perhaps there is a plugin or gem that simplifies it.


I prefer to have separate columns in the database if I'm receiving the input via 3 fields on the form - it keeps things much cleaner and simpler (and after all, nowadays a few extra columns in a table isn't much to worry about). Then all you need is a nice method to output the stuff nicely.

0

精彩评论

暂无评论...
验证码 换一张
取 消