Rails 4 (các câu trả lời khác của Rails 4 có vấn đề):
def change
change_column_null(:users, :admin, false, <put a default value here> )
# change_column(:users, :admin, :string, :default => "")
end
Thay đổi một cột có giá trị NULL trong đó để không cho phép NULL sẽ gây ra sự cố. Đây chính xác là loại mã sẽ hoạt động tốt trong thiết lập phát triển của bạn và sau đó gặp sự cố khi bạn cố gắng triển khai nó vào sản xuất TRỰC TIẾP của mình . Trước tiên, bạn nên thay đổi giá trị NULL thành một cái gì đó hợp lệ và sau đó không cho phép NULL. Giá trị thứ 4 change_column_null
thực hiện chính xác điều đó. Xem tài liệu để biết thêm chi tiết.
Ngoài ra, tôi thường thích đặt giá trị mặc định cho trường vì vậy tôi sẽ không cần chỉ định giá trị của trường mỗi khi tôi tạo đối tượng mới. Tôi bao gồm các mã nhận xét để làm điều đó là tốt.
MyModel.update_all({:date_column => Time.now}, {:date_column => nil})
. Truy vấn ở dạng ban đầu của bạn chỉ làm cho tất cả các mô hình của tôi có giá trị không trong trường.