2017-04-09 29 views
5

Tôi có đối tượng Rails với số gọi lại là after_update gửi một bản ghi đến hàng đợi. Và vấn đề là tôi nhận thấy đôi khi hàng đợi đang được xử lý nhanh hơn đối tượng thực sự đang được cập nhật.Tìm hiểu hàm callback after_update trong Rails 4

Câu hỏi của tôi: là after_update được gọi là không sau khi cập nhật đối tượng đã kết thúc, nhưng khi nó bắt đầu? Tôi cần phải gọi lại những gì nếu tôi muốn làm điều gì đó với nó chỉ sau khi cập nhật thành công?

Trả lời

10

after_save, after_create, after_update được gọi là trong khối giao dịch, vì vậy chúng sẽ được thực thi trước khi thực hiện câu lệnh SQL.

Nếu bạn muốn làm điều gì đó khi thực hiện câu lệnh hoàn tất, bạn nên sử dụng gọi lại after_commit.

+0

Cảm ơn rất nhiều! Tôi đã mất trí về điều này – Zelenka

1

Nếu bạn tham khảo tài liệu Rails, bạn sẽ tìm thấy nhiều cuộc gọi lại mà bạn có thể sử dụng. Điều tốt nhất cho công việc này có thể là "after_commit":

Đây là trực tiếp từ Rails Documents (liên kết ở phía dưới)

3.1 Creating an Object 

before_validation 
after_validation 
before_save 
around_save 
before_create 
around_create 
after_create 
after_save 
after_commit/after_rollback 

3.2 Updating an Object 

before_validation 
after_validation 
before_save 
around_save 
before_update 
around_update 
after_update 
after_save 
after_commit/after_rollback 

3.3 Destroying an Object 

before_destroy 
around_destroy 
after_destroy 

Rails Documents: http://guides.rubyonrails.org/active_record_callbacks.html