Как правильно обрабатывать дополнительную информацию о времени в Rails? - PullRequest
3 голосов
/ 01 июля 2010

Я работаю над приложением Rails, которое позволяет пользователям определять задачи, для которых требуется due_date.due_date может включать или не включать время.

То, как мы сейчас справляемся с этим, ощущается как хак.due_date s по умолчанию - 12:00, и в этом случае мы не отображаем время.Насколько мне известно, объект DateTime не допускает пустых значений времени.

Стоит ли разбивать эту информацию на два столбца в базе данных?Как вы, ребята, справляетесь с этим?

Ответы [ 2 ]

3 голосов
/ 01 июля 2010

Поскольку ваша структура данных должна соответствовать датам с указанием времени и без него, у вас есть два варианта:

Используйте объект Ruby DateTime со значением флага для времени, чтобы указать, что дата не имеет времени. Обычное значение флага для этого - 0, что означает, что полночь не может быть показана. (Полночь составляет 0 секунд после начала дня.)

Например, анализ "1 января 2010" в DateTime даст вам 1 января 2010 00: 00.

В противном случае вам нужно будет изобрести собственную структуру данных. Возможно, самым простым будет класс с DateTime и логическим флагом "show_time". - используя DateTime для хранения времени, вы сможете использовать методы вывода DateTime и выполнять арифметику с ними при необходимости.

Создание новой структуры данных не так уж сложно в Ruby, но если вы можете жить без задач точно в полночь, я бы порекомендовал способ 1. Обратите внимание, что вы, вероятно, захотите распечатать их без времени, так как это то, что просил определитель задачи. Или вы можете включить «(в любое время)» в вывод.

PS

Остерегайтесь часовых поясов! Много способов справиться, но вы должны быть уверены, что выбрали один сознательно.

1 голос
/ 01 июля 2010

Разделение атрибутов может быть излишне сложным.Почему бы не принять соглашение, согласно которому, если время не указано, по умолчанию оно устанавливается на полночь или полдень в указанную дату?Если вам не нужно различать два случая, то есть это полночь, потому что она была указана явно, или это полночь, потому что время не было указано.Если последнее, то их разделение может быть целесообразным или просто добавить логическое значение для устранения неоднозначности случаев.

Если вы думали, что вы будете использовать в дальнейшем для отдельной даты и времени и потратите много энергии на разделение одного поля для другогопричины, по которым это также может привести к расщеплению.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...