2016-05-01 19 views
5

update_all phương pháp trong RoRĐiều gì xảy ra khi update_all không thành công?

Và những gì hiện nó trở lại nếu nó update_all thất bại? nó sẽ tăng một ngoại lệ?

Ví dụ:

ActiveRecord::Base.transaction do 
    users = User.active 
    users.update_all avatar: 'blablablb' 
end 
+0

'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ì. –

+0

Tôi có nghĩa là những gì nó có lỗi trong db? –

+2

Đó 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ó –

Trả lời

4

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
Các vấn đề liên quan