我正在寻找在 Rails 模型中使用持续时间字段的最佳方法。我希望格式为 HH:MM:SS(例如:01:30:23)。使用的数据库是本地的 sqlite 和生产中的 Postgres。
我也想使用这个字段,这样我就可以查看该字段中的所有对象,并计算出该模型中所有对象的总时间,最后得到如下内容:
30 records totaling 45 hours, 25 minutes, and 34 seconds.
那么什么最适合?
- 迁移的字段类型
- CRUD 表单的表单字段(小时、分钟、秒下拉列表?)
- 生成模型中所有记录的总持续时间的成本最低的方法
最佳答案
- 在您的数据库中存储为整数(可能是秒数)。
- 您的报名表将取决于具体的用例。下拉菜单很痛苦;最好在小时 + 分钟 + 秒的持续时间内使用小文本字段。
- 只需对持续时间列运行
SUM
查询即可生成总计。如果您使用整数,这将简单快捷。
另外:
- 使用助手在您的 View 中显示持续时间。您可以使用
123.seconds
(将123
替换为数据库中的整数)轻松地将秒数整数形式的持续时间转换为ActiveSupport::Duration
).在生成的Duration
上使用inspect
以获得漂亮的格式。 (它并不完美。您可能想自己写点东西。) - 在您的模型中,您可能需要属性读取器和写入器返回/获取
ActiveSupport::Duration
对象,而不是整数。只需定义duration=(new_duration)
和duration
,它们在内部调用带有整数参数的read_attribute
/write_attribute
。<
关于ruby-on-rails - 在 Rails 模型中使用持续时间字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1051465/