Ik kwam net iets soortgelijks tegen bij een nieuwe installatie van MySql op Mac OS.
Ik heb het uiteindelijk teruggebracht tot de combinatie van nieuwere versies van MySql die standaard de "strikte modus" inschakelen, en mijn project met een tabel met een aantal twijfelachtige beperkingen erop. De tabel in kwestie was de "join table" die werd gebruikt in een :has_and_belongs_to_many
relatie. Op de een of andere manier was die tabel gemaakt met :created_at
, en :updated_at
attributen met een beperking van :null => false
op hen. Rails 3.2 vult niet automatisch de tijdstempelvelden voor samenvoegtabellen van :habtm
verhoudingen. Wanneer de strikte modus is uitgeschakeld, zal MySql de cols gewoon vullen met nuldatums, zoals 0000-00-00 00:00:00
. Als de strikte modus is ingeschakeld, ontstaat er een uitzondering.
Om het probleem op te lossen, heb ik een migratie uitgevoerd om de tijdstempelvelden nul te laten zijn. Zoals dit:
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
Eerlijk gezegd is het waarschijnlijk beter om de kolommen gewoon weg te laten als je ze niet nodig hebt, maar we hebben een aantal speciale gevallen waarin ze handmatig worden ingesteld.