2014-06-19 8 views

Odpowiedz

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

private 

    def do_something 
    # ... 
    end 
end 

ta wykorzystuje fakt, że before_save zwrotna może warunkowo wykonanie na podstawie wartości zwracanej przez wywołanie metody. Metoda status_id_changed? pochodzi z ActiveModel::Dirty, która pozwala nam sprawdzić, czy określony atrybut został zmieniony po prostu dołączając _changed? do nazwy atrybutu.

Kiedy należy wywołać metodę do_something, spełni wszelkie wymagania. Może to być before_save lub after_save lub dowolna z the defined ActiveRecord::Callbacks.

+0

Czy '' _changed nadal pracować dla Rails 4 i do góry? – Breno

+2

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

+1

To rozwiązanie jest przestarzałe w nowszych wersjach. –

Powiązane problemy