Thiết lập sử dụng một ví dụ đơn giản: Tôi đã có 1 bảng (Totals
) chứa tổng các amount
cột của mỗi bản ghi trong một bảng thứ hai (Things
).Sử dụng ActiveRecord, là có một cách để có được các giá trị cũ của một kỷ lục trong after_update
Khi số thing.amount
được cập nhật, tôi chỉ muốn thêm sự khác biệt giữa giá trị cũ và giá trị mới vào total.sum
.
Hiện tại tôi đang trừ self.amount
trong khi before_update
và thêm self.amount
trong thời gian after_update
. Điều này đặt WAY quá nhiều niềm tin vào bản cập nhật thành công.
Hạn chế: Tôi không muốn tính toán lại tổng của tất cả các giao dịch.
Câu hỏi: Rất đơn giản, tôi muốn truy cập giá trị ban đầu trong khi gọi lại after_update
. Bạn đã nghĩ ra cách nào để làm điều này?
Cập nhật: Tôi sẽ theo ý tưởng của Luke Francl. Trong khi gọi lại số after_update
, bạn vẫn có quyền truy cập vào các giá trị self.attr_was
chính xác là những gì tôi muốn. Tôi cũng quyết định thực hiện after_update
vì tôi muốn giữ loại logic này trong mô hình. Bằng cách này, bất kể tôi quyết định cập nhật giao dịch trong tương lai như thế nào, tôi sẽ biết rằng tôi đang cập nhật tổng số giao dịch một cách chính xác. Cảm ơn mọi người vì đề xuất triển khai của bạn.
Tôi nghĩ một cái gì đó như thế này tồn tại. Bạn có thể liên kết đến tài liệu liên quan về attr_changed không? và attr_was? –
Chắc chắn, tôi đã thêm một liên kết vào câu trả lời. –