在Rails中处理可选时间信息的正确方法是什么?

时间:2010-06-30 21:09:42

标签: ruby-on-rails datetime

我正在开发一个Rails应用程序,允许用户定义需要due_date的任务。 due_date可能包括也可能不包含时间。

我们现在处理此问题的方式感觉就像是黑客。 due_date默认为12:00 AM,在这种情况下,我们不显示时间。据我所知,DateTime对象不允许空时间值。

我应该将此信息分成数据库中的两列吗?你们怎么处理这个?

2 个答案:

答案 0 :(得分:3)

由于您的数据结构需要包含有时间和无时间的日期,因此您有两种选择:

使用带有标记值的Ruby DateTime对象来指示日期没有时间。通常的标志值为0,这意味着无法显示午夜时间。 (午夜是一天开始后的0秒。)

例如,将“2010年1月1日”解析为DateTime将为您提供2010年1月1日00:00。

否则你需要发明自己的数据结构。最简单的可能是一个带有DateTime和“show_time”布尔标志的类。 - 通过使用DateTime来保存时间,您将能够使用DateTime输出方法,并在需要时对它们进行算术运算。

在Ruby中创建一个新的数据结构并不是什么大不了的事,但是如果你可以在午夜完全没有任务,我建议使用方法1.注意你可能想要打印它们没有时间这就是任务定义者所要求的。或者您可以在输出中包含“(任何时间)”。

<强> PS

留意时区!处理的方法很多,但你一定要刻意选择。

答案 1 :(得分:1)

拆分属性可能会不必要地复杂化。为什么不采用一种惯例,如果没有指定时间,则将其默认为相关日期的午夜或中午?除非您需要能够区分这两种情况,即这是午夜,因为它是明确指定的,或者这是午夜,因为没有指定时间。如果后者然后拆分它们可能是可取的,或者只是添加一个布尔值来消除歧义。

如果你认为你有进一步的使用分开的日期和时间,并且由于其他原因会花费大量能量分裂单个字段,那么这也可能会争论分裂。