MacOSにMySqlを新規インストールしたときに似たようなものに遭遇しました。
私はついにそれを、デフォルトで「厳密モード」をオンにする新しいバージョンのMySqlと、いくつかの疑わしい制約のあるテーブルを持つプロジェクトの組み合わせに絞り込みました。問題のテーブルは、:has_and_belongs_to_many
で使用されている「結合テーブル」でした。 関係。どういうわけか、そのテーブルは:created_at
で作成されていました 、および:updated_at
:null => false
の制約があった属性 それらの上に。 Rails 3.2は、:habtm
の結合テーブルのタイムスタンプフィールドに自動的にデータを入力しません。 関係。 strictモードがオフになっている場合、MySqlは、0000-00-00 00:00:00
のように、ゼロ化された日付を列に入力するだけです。 。厳密モードをオンにすると、例外が発生します。
この問題を修正するために、タイムスタンプフィールドをnullにできるように移行を実行しました。このように:
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
正直なところ、必要がない場合は列を削除する方がよいでしょうが、実際に手動で設定される特殊なケースがいくつかあります。