Rails5获取字段改变事件

2017-12-15  本文已影响84人  得失的瘦马

在业务逻辑中,我们经常需要在某些事件发生后触发一些动作,
譬如当用户的手机号码改变后,
我们需要给这个用户新的号码发送一条短信告知手机号码已经改变,

rails4 的做法,可能是在 after_save时触发事件

如:

user.rb

after_save :when_cell_change_send_message

private
    def when_cell_change_send_message
        if (self.cell_changed?)
            #send_messaged
        end
    end

这个时候会有一个问题,就是after_save 后可能会rollback
这样手机号码 cell rollback 并未改变,而短信已经发送出去了
目前的做法,我并不是直接的去发送短信,而是触发下一个commit
然后再发送短信,这样很麻烦

在Rails5中已经解决了这样的问题

user.rb

after_commit :when_cell_change_send_message

private
    def when_cell_change_send_message
        if(self.saved_change_to_cell?) #self.saved_change_to_attribute?(:cell)
            #send_messaged
        end
    end

after_commit 在rails4中是无法获取change事件的
而在rails5中是可以获取字段的change事件

上一篇下一篇

猜你喜欢

热点阅读