sql >> Base de Datos >  >> RDS >> Mysql

Rails 3.2 + MySQL:Error:el campo 'created_at' no tiene un valor predeterminado:INSERTAR EN

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.