2014-04-06 16 views
11

Tôi đang cố gắng để thực hiện một after_update có điều kiện, tôi đã điều sau đây:Nhận thay đổi các thuộc tính trên after_update callback

after_update do |participant| 
    Rails.logger.info "#{self.previous_changes} changed." 
    if self.previous_changes.include?(:current_distance) 
     #Do my stuff ... 
    end 
    end 

Các bản in logger trống băm: {}

Làm thế nào tôi có thể kiểm tra thuộc tính đã được đã thay đổi?

Tôi đang sử dụng: participant.update_attribute(:current_distance, distance) để cập nhật thuộc tính.

Trả lời

16

Bạn muốn sử dụng changes không phải previous_changes. Bạn vẫn đang trong cùng một giao dịch lưu để những gì bạn đang tìm kiếm nằm trong số changes. previous_changes sẽ không có thông tin cho đến sau khi cập nhật hoàn tất.

Rails 5.1.1:
sử dụng saved_changes thay vì changes vì nó sẽ hết hạn vào phiên bản mới.

+0

Nội dung thú vị! Nhưng không nên cập nhật được hoàn thành khi nó đạt đến 'after_update' gọi lại? – kiddorails

+1

Không cập nhật nào không được coi là "hoàn thành" cho đến khi chuỗi gọi lại đầy đủ được thực hiện. Vui lòng xem http://api.rubyonrails.org/classes/ActiveRecord/Callbacks.html để biết chi tiết. –

Các vấn đề liên quan