Saya baru saja mengalami sesuatu yang serupa pada instalasi baru MySql di Mac OS.
Saya akhirnya mempersempitnya menjadi kombinasi versi MySql yang lebih baru yang mengaktifkan "mode ketat" secara default, dan proyek saya memiliki tabel dengan beberapa batasan yang dipertanyakan. Tabel yang dimaksud adalah "join table" yang digunakan dalam :has_and_belongs_to_many
hubungan. Entah bagaimana tabel itu dibuat dengan :created_at
, dan :updated_at
atribut yang memiliki batasan :null => false
pada mereka. Rails 3.2 tidak secara otomatis mengisi bidang stempel waktu untuk tabel gabungan :habtm
hubungan. Saat mode ketat dimatikan, MySql hanya akan mengisi kolom dengan tanggal nol, seperti 0000-00-00 00:00:00
. Dengan mengaktifkan mode ketat, itu menimbulkan pengecualian.
Untuk memperbaiki masalah ini, saya menjalankan migrasi untuk mengizinkan bidang stempel waktu menjadi nol. Seperti ini:
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
Sejujurnya, mungkin lebih baik untuk membuang kolom saja jika Anda tidak membutuhkannya, tetapi kami memiliki beberapa kasus khusus di mana mereka benar-benar disetel secara manual.