2014-06-19 16 views

Trả lời

77
class Page < ActiveRecord::Base 
    before_save :do_something, if: :status_id_changed? 

private 

    def do_something 
    # ... 
    end 
end 

này sử dụng thực tế là before_save callback có điều kiện có thể thực hiện dựa trên các giá trị trả về của một phương pháp gọi. Phương pháp status_id_changed? xuất phát từ ActiveModel::Dirty, cho phép chúng tôi kiểm tra xem một thuộc tính cụ thể có thay đổi hay không bằng cách thêm _changed? vào tên thuộc tính.

Khi phương pháp do_something nên được gọi là tùy theo nhu cầu của bạn. Có thể là before_save hoặc after_save hoặc bất kỳ số nào trong số the defined ActiveRecord::Callbacks.

+0

Liệu '_changed' vẫn làm việc cho Rails 4 và lên? – Breno

+2

@Breno yes. http://api.rubyonrails.org/classes/ActiveModel/Dirty.html – pdobb

+1

Giải pháp này không được chấp nhận trong các phiên bản mới hơn. –

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