Jag stötte precis på något liknande på en nyinstallation av MySql på Mac OS.
Jag har äntligen begränsat det till kombinationen av nyare versioner av MySql som aktiverar "strikt läge" som standard, och mitt projekt har en tabell med några tvivelaktiga begränsningar. Tabellen i fråga var "join-tabellen" som användes i en :has_and_belongs_to_many
relation. På något sätt hade den tabellen skapats med :created_at
och :updated_at
attribut som hade en begränsning av :null => false
på dem. Rails 3.2 fyller inte automatiskt i tidsstämpelfälten för kopplingstabeller för :habtm
relationer. När strikt läge är avstängt kommer MySql bara att fylla kolorna med nollställda datum, som 0000-00-00 00:00:00
. Med strikt läge aktiverat ger det ett undantag.
För att åtgärda problemet körde jag en migrering för att tillåta tidsstämpelfälten att vara null. Så här:
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
Ärligt talat är det förmodligen bättre att bara släppa kolumnerna om du inte behöver dem, men vi har ett par speciella fall där de faktiskt ställs in manuellt.