Właśnie natknąłem się na coś podobnego na świeżej instalacji MySql na Mac OS.
W końcu zawęziłem to do kombinacji nowszych wersji MySql, które domyślnie włączają „tryb ścisły”, a mój projekt ma tabelę z pewnymi wątpliwymi ograniczeniami. Ta tabela była „tablicą łączenia” używaną w :has_and_belongs_to_many
relacja. W jakiś sposób ta tabela została utworzona za pomocą :created_at
i :updated_at
atrybuty, które miały ograniczenie :null => false
na nich. Railsy 3.2 nie wypełniają automatycznie pól znacznika czasu dla tabel złączeń :habtm
relacje. Gdy tryb ścisły jest wyłączony, MySql po prostu wypełni kolumny z wyzerowanymi datami, np. 0000-00-00 00:00:00
. Po włączeniu trybu ścisłego zgłasza wyjątek.
Aby rozwiązać ten problem, przeprowadziłem migrację, aby pola sygnatury czasowej były puste. Tak:
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
Szczerze mówiąc, prawdopodobnie lepiej jest po prostu usunąć kolumny, jeśli ich nie potrzebujesz, ale mamy kilka specjalnych przypadków, w których są one ustawiane ręcznie.