2012-01-27 15 views
14

Có vẻ như Paperclip không tôn trọng mô hình bẩn ActiveRecord. Làm cách nào để phát hiện thay đổi trong số gọi lại after_save.Làm thế nào để phát hiện xem tập tin đính kèm kẹp giấy đã được thay đổi trong cuộc gọi lại after_save chưa?

class User 

    has_attachment :avatar  
    after_save :do_something 

    def do_something 
    if name_changed? 
     # 
    end 

    # How to determine avatar was changed? 
    #if avatar_changed? 
    # # 
    #end 

    end 
end 

Note

Tôi biết tôi có thể phát hiện sự thay đổi trong before_save callback sử dụng avatar.dirty? cuộc gọi, nhưng cờ dirty được thiết lập để sai sau khi tiết kiệm.

Tôi có thể thêm bộ xử lý, nhưng tôi cần thực hiện các tác vụ của mình sau khi lưu dữ liệu mô hình.

Trả lời

26

Bạn có thể thử truy cập vào phương pháp _changed? cho một trong những thuộc tính:

if avatar_updated_at_changed? 
    # do something 
end 
+1

Đây là những gì tôi đang làm ngay bây giờ. Tôi tự hỏi nếu có một phương pháp tốt hơn. –

+1

Bạn đã từng đưa ra giải pháp tốt hơn chưa? –

3

Khi tôi cần truy cập vào dữ liệu này sau khi lưu, tôi thường áp dụng cách này:

class Foo 

    has_attachment :avatar 
    before_save :check_for_avatar_changes 
    after_save :do_something 

    def do_something 
    if @avatar_has_changes 
     # 
    end 
    end 

    def check_for_avatar_changes 
    @avatar_has_changes = self.avatar.dirty? 
    end 

end 
+0

Để cải thiện chất lượng bài đăng của bạn, vui lòng bao gồm cách/tại sao bài đăng của bạn sẽ giải quyết được vấn đề. –

+0

Có sự cố trong mã check_for_avatar_changes ... Nếu hàm funtion trả về false, mô hình sẽ không được lưu vì đó là cuộc gọi lại before_save. – Christian

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