Ich stieß gerade auf etwas ähnliches auf einer neuen Installation von MySql auf Mac OS.
Ich habe es schließlich auf die Kombination von neueren Versionen von MySql eingegrenzt, die standardmäßig "strict mode" einschalten, und mein Projekt hat eine Tabelle mit fragwürdigen Einschränkungen. Die fragliche Tabelle war die "Join-Tabelle", die in einer :has_and_belongs_to_many
-Beziehung verwendet wurde. Irgendwie wurde diese Tabelle mit :created_at
und :updated_at
Attributen erstellt, die eine Beschränkung von :null => false
auf ihnen hatten. Rails 3.2 füllt die Zeitstempelfelder für Join-Tabellen der :habtm
-Beziehungen nicht automatisch auf. Wenn der strikte Modus ausgeschaltet ist, wird MySql nur die Spalten mit nullten Daten füllen, wie 0000-00-00 00:00:00
. Wenn der strikte Modus aktiviert ist, wird eine Ausnahme ausgelöst.
Um das Problem zu beheben, habe ich eine Migration ausgeführt, damit die Zeitstempelfelder null sind. Wie folgt aus:
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
Ehrlich gesagt, ist es wahrscheinlich besser, nur die Spalten fallen, wenn Sie sie nicht brauchen, aber wir haben ein paar spezielle Fälle, in denen sie tatsächlich von Hand gesetzt bekommen.
Wie schaffen Sie das neue Element entfernen? – ericeason
'@photo = Photo.new (params [: Foto])' ... '@ photo.save' – user984621