真正要防止超卖还需要在更新的时候在数据库层再作一次控制，用在多个用户抢最后几张票。不过这个优先级可以先放低。我看了下用 `update_all` 来做是可行的，因为返回的是受影响行数，如果影响的行数为0，可以 rollback 整个 order 的创建。

    Event.where(id: event_id).where('started_at < ?', Time.zone.now).where('tickets_quantity > ?', quantity).update_all("tickets_quantity = tickets_quantity - #{quantity}")