Току-що попаднах на нещо подобно при нова инсталация на 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
Честно казано, вероятно е по-добре просто да махнете колоните, ако не ви трябват, но имаме няколко специални случая, в които те всъщност се задават ръчно.