sql >> Databáze >  >> RDS >> Mysql

Rails 3.2 + MySQL:Chyba:Pole 'created_at' nemá výchozí hodnotu:INSERT INTO

Právě jsem narazil na něco podobného při čerstvé instalaci MySql na Mac OS.

Nakonec jsem to zúžil na kombinaci novějších verzí MySql, které ve výchozím nastavení zapínají „přísný režim“ a můj projekt má tabulku s některými pochybnými omezeními. Dotyčná tabulka byla „spojovací tabulka“ použitá v :has_and_belongs_to_many vztah. Ta tabulka byla nějak vytvořena pomocí :created_at a :updated_at atributy, které měly omezení :null => false na ně. Rails 3.2 automaticky nevyplňuje pole časových razítek pro spojovací tabulky :habtm vztahy. Když je přísný režim vypnutý, MySql pouze vyplní sloupce s vynulovanými daty, například 0000-00-00 00:00:00 . Se zapnutým přísným režimem vyvolá výjimku.

Abych problém vyřešil, spustil jsem migraci, aby pole časových razítek byla nulová. Takhle:

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

Upřímně řečeno, je pravděpodobně lepší sloupce jednoduše vypustit, pokud je nepotřebujete, ale máme několik speciálních případů, kdy se ve skutečnosti nastavují ručně.



  1. Laravel kde mezi s nebo kde mezi

  2. Jak mohu extrahovat soubory z pole Oracle BLOB?

  3. Self Joins in Mysql... Jak se mohu sám připojit k tomuto stolu?

  4. Ukládání ID jako hodnot oddělených čárkou