Je viens de rencontrer quelque chose de similaire lors d'une nouvelle installation de MySql sur Mac OS.
Je l'ai finalement réduit à la combinaison de versions plus récentes de MySql activant le "mode strict" par défaut, et mon projet ayant une table avec des contraintes discutables. La table en question était la "table de jointure" utilisée dans un :has_and_belongs_to_many
relation. D'une manière ou d'une autre, cette table avait été créée avec :created_at
, et :updated_at
attributs qui avaient une contrainte :null => false
sur eux. Rails 3.2 ne remplit pas automatiquement les champs d'horodatage pour les tables de jointure de :habtm
des relations. Lorsque le mode strict est désactivé, MySql remplit simplement les colonnes avec des dates mises à zéro, comme 0000-00-00 00:00:00
. Lorsque le mode strict est activé, une exception est déclenchée.
Pour résoudre le problème, j'ai exécuté une migration pour permettre aux champs d'horodatage d'être nuls. Comme ceci :
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
Honnêtement, il est probablement préférable de simplement supprimer les colonnes si vous n'en avez pas besoin, mais nous avons quelques cas particuliers où elles sont en fait définies manuellement.