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