Я только что столкнулся с чем-то подобным при новой установке MySql в Mac OS.
Наконец, я сузил его до комбинации более новых версий MySql, включающих «строгий режим» по умолчанию, и моего проекта, имеющего таблицу с некоторыми сомнительными ограничениями. Рассматриваемая таблица была «таблицей соединений», используемой в отношении :has_and_belongs_to_many
. Каким-то образом эта таблица была создана с атрибутами :created_at
и :updated_at
, для которых было установлено ограничение :null => false
. Rails 3.2 не заполняет автоматически поля меток времени для таблиц соединения :habtm
отношений. Когда строгий режим отключен, MySql просто заполнит столбцы нулевыми датами, например 0000-00-00 00:00:00
. При включенном строгом режиме возникает исключение.
Чтобы решить эту проблему, я выполнил миграцию, чтобы поля меток времени были нулевыми. Как это:
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
Честно говоря, вероятно, лучше просто удалить столбцы, если они вам не нужны, но у нас есть пара особых случаев, когда они на самом деле устанавливаются вручную.
person
Jeremy Green
schedule
13.05.2013