在将 Rails 数据存储到我的 Postgres 间隔数据类型列之前,形成 Rails 数据的正确方法是什么?
What is the proper way to form Rails data before I store it in my Postgres interval data-type column?
我正在使用 Rails 4.2.3 和 Postgres 数据库。在我的数据库中,我有一个类型为“interval”的列“time_in_ms”。在我的 Rails 表单中,我想将我的小时、分钟和秒下拉列表保存到这一列中,然后在从数据库中提取这些值时也能准确显示这些值。这样做的正确方法是什么?现在,在我的 Rails 模型中,我将毫秒保存到我的“time_in_ms”列中。所以如果这是值
60000000
我在我的 Postgres 数据库中看到了这个……
16666:40:00
不管那是什么意思。然后,当我尝试显示数据库中的值时,出现以下错误:
undefined method `/' for "16666:40:00":String
抱怨这条线……
<td><%= (my_object_time.time_in_ms/(1000*60*60))%24 %>:<%= ((my_object_time.time_in_ms/(1000*60))%60).to_s.rjust(2,'0') %>:<%= ((my_object_time.time_in_ms/1000)%60).to_s.rjust(2,'0') %></td>
在将数据保存到 Postgres 之前我应该如何制定我的数据,然后我应该如何正确地显示它?
您使用 interval
类型来保存小时、分钟和秒是正确的。 但是这不会节省毫秒。
您所做的是将时间转换为毫秒。您的间隔字段只知道秒,6_000_000
秒导致 16666:40:0
- 超过了它代表的 1_000_000
秒,这似乎是最大限制。
您应该以不同的方式处理:
按预期使用 interval
字段:节省 小时 、 分钟 和 秒 到一个列中 - 它们无论如何都是您表单的一部分。那么在视图中显示也很容易。
然后,如果你想检索你的毫秒数,只需添加一个方法:
class Bar < ActiveRecord::Base
def time_in_milliseconds
# retrieve the interval seconds from the database and multiply by 1000
end
end
此外,要处理毫秒与 hh:mm:ss
格式的转换,您应该查看 this great answer。
我正在使用 Rails 4.2.3 和 Postgres 数据库。在我的数据库中,我有一个类型为“interval”的列“time_in_ms”。在我的 Rails 表单中,我想将我的小时、分钟和秒下拉列表保存到这一列中,然后在从数据库中提取这些值时也能准确显示这些值。这样做的正确方法是什么?现在,在我的 Rails 模型中,我将毫秒保存到我的“time_in_ms”列中。所以如果这是值
60000000
我在我的 Postgres 数据库中看到了这个……
16666:40:00
不管那是什么意思。然后,当我尝试显示数据库中的值时,出现以下错误:
undefined method `/' for "16666:40:00":String
抱怨这条线……
<td><%= (my_object_time.time_in_ms/(1000*60*60))%24 %>:<%= ((my_object_time.time_in_ms/(1000*60))%60).to_s.rjust(2,'0') %>:<%= ((my_object_time.time_in_ms/1000)%60).to_s.rjust(2,'0') %></td>
在将数据保存到 Postgres 之前我应该如何制定我的数据,然后我应该如何正确地显示它?
您使用 interval
类型来保存小时、分钟和秒是正确的。 但是这不会节省毫秒。
您所做的是将时间转换为毫秒。您的间隔字段只知道秒,6_000_000
秒导致 16666:40:0
- 超过了它代表的 1_000_000
秒,这似乎是最大限制。
您应该以不同的方式处理:
按预期使用 interval
字段:节省 小时 、 分钟 和 秒 到一个列中 - 它们无论如何都是您表单的一部分。那么在视图中显示也很容易。
然后,如果你想检索你的毫秒数,只需添加一个方法:
class Bar < ActiveRecord::Base
def time_in_milliseconds
# retrieve the interval seconds from the database and multiply by 1000
end
end
此外,要处理毫秒与 hh:mm:ss
格式的转换,您应该查看 this great answer。