2010-12-08 31 views
12

Làm cách nào để thực thi lệnh gọi lại? Ví dụ, làm thế nào để bạn đảm bảo rằng Step 1 xảy ra trước khi Step 2:Thực thi Lệnh gọi Rails Callbacks

after_save do 
    logger.info "Step 1" 
end 

after_save do 
    logger.info "Step 2" 
end 

ví dụ thực tế của tôi liên quan đến việc sử dụng đá quý bên thứ ba và đảm bảo rằng họ đã hoàn thành (họ làm việc trên callbacks) trước khi callbacks của riêng tôi. Tôi phải sử dụng cùng một cuộc gọi lại (ví dụ: không thể sử dụng kết hợp beforeafter).

Cảm ơn!

Trả lời

17

Nếu bạn sử dụng gọi lại cấp lớp, chúng được gọi theo thứ tự chúng được xác định.

class Foo < ActiveRecord::Base 

    after_save :step1 
    after_save :step2 

private 

    def step1 
    # stuff 
    end 

    def step2 
    # stuff 
    end 
end 

Đối với đá quý bên thứ ba, phụ thuộc vào cách bạn tương tác với đá quý, nhưng tỷ lệ cược sẽ được gọi trước tiên vì chúng được tải trước.

Tôi hoàn toàn không khuyến nghị sử dụng kiểu def after_save, đặc biệt là khi xử lý bằng đá quý của bên thứ ba.

+0

'def after_save' là lỗi đánh máy (tôi đã cập nhật ví dụ). Đá quý không được gọi đầu tiên (nó rất giống với 'paperclip', và tôi định nghĩa' has_attached_file' phía trên tùy chỉnh gọi lại của tôi). Bất kỳ ý tưởng nào khác về việc thực thi một đơn đặt hàng? –

+0

Sau khi forking đá quý tôi đã có thể sửa chữa thứ tự. Bạn đúng trong đó thứ tự của định nghĩa là tất cả những gì quan trọng! Cảm ơn! –

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