Acabo de encontrarme con algo similar en una nueva instalación de MySql en Mac OS.
Finalmente lo reduje a la combinación de versiones más nuevas de MySql que activan el "modo estricto" de forma predeterminada, y mi proyecto tiene una tabla con algunas restricciones cuestionables. La tabla en cuestión era la "tabla de unión" utilizada en un :has_and_belongs_to_many
relación. De alguna manera, esa tabla se había creado con :created_at
y :updated_at
atributos que tenían una restricción de :null => false
en ellos. Rails 3.2 no completa automáticamente los campos de marca de tiempo para unir tablas de :habtm
relaciones Cuando el modo estricto está desactivado, MySql solo llenará las columnas con fechas puestas a cero, como 0000-00-00 00:00:00
. Con el modo estricto activado, genera una excepción.
Para solucionar el problema, ejecuté una migración para permitir que los campos de marca de tiempo fueran nulos. Así:
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
Honestamente, probablemente sea mejor dejar caer las columnas si no las necesita, pero tenemos un par de casos especiales en los que realmente se configuran manualmente.