Právě jsem narazil na něco podobného při čerstvé instalaci MySql na Mac OS.
Nakonec jsem to zúžil na kombinaci novějších verzí MySql, které ve výchozím nastavení zapínají „přísný režim“ a můj projekt má tabulku s některými pochybnými omezeními. Dotyčná tabulka byla „spojovací tabulka“ použitá v :has_and_belongs_to_many
vztah. Ta tabulka byla nějak vytvořena pomocí :created_at
a :updated_at
atributy, které měly omezení :null => false
na ně. Rails 3.2 automaticky nevyplňuje pole časových razítek pro spojovací tabulky :habtm
vztahy. Když je přísný režim vypnutý, MySql pouze vyplní sloupce s vynulovanými daty, například 0000-00-00 00:00:00
. Se zapnutým přísným režimem vyvolá výjimku.
Abych problém vyřešil, spustil jsem migraci, aby pole časových razítek byla nulová. Takhle:
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
Upřímně řečeno, je pravděpodobně lepší sloupce jednoduše vypustit, pokud je nepotřebujete, ale máme několik speciálních případů, kdy se ve skutečnosti nastavují ručně.