ruby / rails - преобразование всего поля базы данных (из строки в дату) - PullRequest
0 голосов
/ 21 февраля 2011

Я допустил огромную ошибку.

Изначально я создал свою модель с полем start_date и сделал ее строкой для отслеживания дат событий.

Теперь я это понимаюбыло бы неплохо иметь это поле в качестве типа даты, чтобы я мог выполнять вычисления, например, находить события, где start_date находится между сегодняшним днем ​​и 1 месяцем с этого момента.

Эта проблема, у меня уже есть 500 записей, поэтому начало было бы неудачным...

Формат поля start_date имеет совместимый с рельсами тип "2011-02-21 22:00:00", но это просто строка ...

Есть что-нибудьЯ могу сделать?

Ответы [ 3 ]

4 голосов
/ 21 февраля 2011
  1. Создайте миграцию для добавления столбца start_date_2 нужного вам типа
  2. Model.find(:all).each { |i| i.update_attributes(:start_date_2, Date.new(i.start_date)) }
  3. Создание миграции для удаления start_date и переименования start_date_2 в start_date

Это должно сработать, из головы.

1 голос
/ 21 февраля 2011

Вы можете попробовать сделать EXPORT для таблицы (убедитесь, что вы экспортируете только данные, не включая команды таблицы CREATE и / или DROP).

Создайте миграция для изменения типа данных

TRUNCATE таблица

ИМПОРТ данные

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

0 голосов
/ 21 февраля 2011

Возможно, вы можете покончить с риском изменения типа столбца, если есть текущие данные. Методы разбора могут спасти вас. Из Ruby-doc:

parse(str='-4712-01-01', comp=true, sg=ITALY) 
Create a new Date object by parsing from a String, without specifying the format.

str is a String holding a date representation. comp specifies whether to interpret 2-digit years as 19XX (>= 69) or 20XX (< 69); the default is not to. The method will attempt to parse a date from the String using various heuristics; see _parse in date/format.rb for more details. If parsing fails, an ArgumentError will be raised. 

Здесь и здесь - еще несколько примеров / объяснений. Надеюсь, это поможет.

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