Tôi vừa gặp một cái gì đó tương tự trên bản cài đặt MySql mới trên Mac OS.
Cuối cùng tôi đã thu hẹp nó xuống sự kết hợp của các phiên bản MySql mới hơn, bật "chế độ nghiêm ngặt" theo mặc định và dự án của tôi có một bảng với một số ràng buộc đáng ngờ trên đó. Bảng được đề cập là "bảng tham gia" được sử dụng trong :has_and_belongs_to_many
mối quan hệ. Bằng cách nào đó, bảng đó đã được tạo bằng :created_at
và :updated_at
thuộc tính có ràng buộc :null => false
về họ. Rails 3.2 không tự động điền các trường dấu thời gian cho các bảng tham gia của :habtm
các mối quan hệ. Khi chế độ nghiêm ngặt bị tắt, MySql sẽ chỉ điền vào các cột bằng không ngày tháng, như 0000-00-00 00:00:00
. Khi bật chế độ nghiêm ngặt, nó sẽ tạo ra một ngoại lệ.
Để khắc phục sự cố, tôi đã chạy di chuyển để cho phép các trường dấu thời gian trống. Như thế này:
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
Thành thật mà nói, có lẽ tốt hơn là bạn chỉ nên bỏ các cột nếu bạn không cần chúng, nhưng chúng tôi có một số trường hợp đặc biệt mà chúng thực sự được đặt theo cách thủ công.