Jeg er lige stødt på noget lignende på en ny installation af MySql på Mac OS.
Jeg indsnævrede det endelig til kombinationen af nyere versioner af MySql, der aktiverer "streng tilstand" som standard, og mit projekt har en tabel med nogle tvivlsomme begrænsninger. Den pågældende tabel var "join-tabellen", der blev brugt i en :has_and_belongs_to_many
forhold. På en eller anden måde var den tabel blevet oprettet med :created_at
, og :updated_at
attributter, der havde en begrænsning på :null => false
på dem. Rails 3.2 udfylder ikke automatisk tidsstempelfelterne for jointabeller i :habtm
relationer. Når streng tilstand er slået fra, vil MySql blot udfylde kolonnerne med nulstillede datoer, såsom 0000-00-00 00:00:00
. Med streng tilstand slået til rejser det en undtagelse.
For at løse problemet kørte jeg en migrering for at tillade tidsstempelfelterne at være nul. Sådan:
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
Helt ærligt, det er nok bedre bare at droppe kolonnerne, hvis du ikke har brug for dem, men vi har et par specielle tilfælde, hvor de faktisk bliver indstillet manuelt.