Почему Rails сохраняет String как столбец с нулевым временем? - PullRequest
1 голос
/ 29 июля 2010

Я столкнулся с этой идиосинкразией при тестировании моих проверок.С миграцией, определенной следующим образом:

create_table :time_windows do |t|
  t.datetime :window_begin, :null => true
  t.datetime :window_end, :null => true
end

в irb

>> t = TimeWindow.new({:window_begin  => Time.now, :window_end => "not a time"})
=> #<TimeWindow id: nil, window_begin: "2010-07-29 15:54:07", window_end: nil>

Мой вопрос заключается в том, почему ActiveRecord интерпретирует «не время» как ноль, а не просто установку: window_end = «невремя"?То же самое преобразование в ноль происходит, когда вы также устанавливаете: window_end для int.

Причина, по которой это проблема для меня, заключается в том, что кто-то пытается сохранить не значение Time в: window_end (или:столбец window_start), я хотел бы выдать ошибку, но это не будет иметь место здесь.

Спасибо.

1 Ответ

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

Прежде всего база данных не может сохранить строку в столбце даты и времени. Во-вторых, Rails интерпретирует «не время» как ноль, потому что у вас нет значения времени, то есть у вас есть ноль.

Наконец, вы несете ответственность за проверку ваших данных. Вы можете сделать это примерно так: рельсы, встроенные в проверку даты и времени

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