update_all
là một trong nhiều phương pháp mà bỏ qua kiểm chứng thực và callbacks. Vì vậy, mọi xác thực ActiveRecord chỉ đơn giản là sẽ không chạy khi gọi update_all
.
Tuy nhiên, nếu cuộc gọi update_all
không phù hợp với một hạn chế ở cấp cơ sở dữ liệu, hoặc gây ra một ngoại lệ trong cơ sở dữ liệu của bạn, sau đó ActiveRecord sẽ ném một ngoại lệ ActiveRecord::StatementInvalid
và sẽ phá vỡ từ update_all
mà không trả lại một giá trị, như bất kỳ ngoại lệ nào khác.
phương pháp ActiveRecord khác mà bỏ qua kiểm chứng thực bao gồm:
- sụt lần!
- decrement_counter
- gia tăng!
- increment_counter
- chuyển đổi!
- lạc
- update_attribute
- update_column
- update_counters
Nguồn
2016-05-01 23:35:38
'update_all' bỏ qua kiểm chứng thực bình thường và callbacks ActiveRecords của. Về cơ bản bạn đang chèn truy vấn thẳng vào DB. Lỗi duy nhất 'update_all' trả về là nếu bạn để trống thuộc tính (không có đối số). Bất kỳ lỗi hoặc ngoại lệ nào có thể xuất phát từ 'Arel'. Bạn nên thử chạy 'update_all' với thông tin không hợp lệ và xem nó trả về cái gì. –
Tôi có nghĩa là những gì nó có lỗi trong db? –
Đó là những gì tôi đang nói. Thử nó. Nếu bạn không chắc chắn về dữ liệu đi vào 'update_all', tôi khuyên bạn không nên sử dụng nó –