Mi sono appena imbattuto in qualcosa di simile su una nuova installazione di MySql su Mac OS.
Alla fine l'ho ristretto alla combinazione di versioni più recenti di MySql che attivano la "modalità rigorosa" per impostazione predefinita e il mio progetto ha una tabella con alcuni vincoli discutibili su di essa. La tabella in questione era la "tabella di unione" usata in un :has_and_belongs_to_many
relazione. In qualche modo quella tabella era stata creata con :created_at
e :updated_at
attributi che avevano un vincolo di :null => false
su di essi. Rails 3.2 non compila automaticamente i campi timestamp per le tabelle di join di :habtm
relazioni. Quando la modalità rigorosa è disattivata, MySql popolerà semplicemente le colonne con date azzerate, come 0000-00-00 00:00:00
. Con la modalità rigorosa attivata, viene sollevata un'eccezione.
Per risolvere il problema, ho eseguito una migrazione per consentire ai campi del timestamp di essere nulli. In questo modo:
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
Onestamente, probabilmente è meglio eliminare le colonne se non ne hai bisogno, ma abbiamo un paio di casi speciali in cui vengono effettivamente impostate manualmente.