Ответ 1
Я просто столкнулся с чем-то похожим на новую установку MySql на Mac OS.
Я, наконец, сузил его до сочетания новых версий MySql, которые по умолчанию включали "строгий режим", а мой проект имел таблицу с некоторыми сомнительными ограничениями на нее. В рассматриваемой таблице была "таблица соединений", используемая в отношении :has_and_belongs_to_many
. Каким-то образом эта таблица была создана с атрибутами :created_at
и :updated_at
, у которых было ограничение :null => false
на них. Rails 3.2 автоматически не заполняет поля метки времени для таблиц соединений :habtm
. Когда строгий режим отключен, MySql просто заполнит cols нулевыми датами, например 0000-00-00 00:00:00
. При включенном строгом режиме возникает исключение.
Чтобы исправить проблему, я выполнил миграцию, чтобы поля timestamp были равны нулю. Вот так:
class ChangeNullableForTimestampsOnThing1sThing2s < ActiveRecord::Migration
def up
change_column(:thing1s_thing2s, :created_at, :datetime, :null => true)
change_column(:thing1s_thing2s, :updated_at, :datetime, :null => true)
end
def down
change_column(:thing1s_thing2s, :created_at, :datetime, :null => false)
change_column(:thing1s_thing2s, :updated_at, :datetime, :null => false)
end
end
Честно говоря, лучше всего просто отбросить столбцы, если они вам не нужны, но у нас есть пара особых случаев, когда они действительно устанавливаются вручную.