Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Rails 3.2 + MySQL:Erro:O campo 'created_at' não tem um valor padrão:INSERT INTO


Acabei de encontrar algo semelhante em uma nova instalação do MySql no Mac OS.

Eu finalmente reduzi para a combinação de versões mais recentes do MySql ativando o "modo estrito" por padrão, e meu projeto tendo uma tabela com algumas restrições questionáveis. A tabela em questão era a "tabela de junção" usada em um :has_and_belongs_to_many relação. De alguma forma, essa tabela foi criada com :created_at e :updated_at atributos que tinham uma restrição de :null => false neles. Rails 3.2 não preenche automaticamente os campos de timestamp para tabelas de junção de :habtm relacionamentos. Quando o modo estrito está desativado, o MySql apenas preencherá as colunas com datas zeradas, como 0000-00-00 00:00:00 . Com o modo estrito ativado, ele gera uma exceção.

Para corrigir o problema, executei uma migração para permitir que os campos de carimbo de data e hora fossem nulos. Assim:
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, provavelmente é melhor simplesmente descartar as colunas se você não precisar delas, mas temos alguns casos especiais em que elas são definidas manualmente.