Rails - 跟踪活动网站上的预订

时间:2016-07-13 10:39:26

标签: ruby-on-rails ruby ruby-on-rails-4

我正在使用Rails构建一个事件站点。我需要创建一个系统来监控正在进行的预订数量,以确保事件不会过度订阅。最有效(干)的方式是什么?在我的索引页面上,我列出了每个事件的主图像,事件标题和日期。我还希望包含一条跟踪消息,说明剩下多少个空格,例如剩下50个空格 - 现在预订"。

我已在我的预订控制器中尝试了此代码,但它无法正常工作 -

if @event.bookings.count >= @event.number_of_spaces
        flash[:warning] = "Sorry, this event is fully booked."
        redirect_to root_path


    end

有更有效的方法吗?我有一个预订MVC设置。

1 个答案:

答案 0 :(得分:0)

您可能希望在事务中执行此操作,因为可能存在两个人同时尝试预订事件的情况,因此您最终会获得比事件的number_of_space更多的预订。

在控制器中:

Booking.transaction do
  @booking.save!
  @event.reload
  if @event.bookings.count > @event.number_of_spaces
    flash[:warning] = "Sorry, this event is fully booked."
    raise ActiveRecord::Rollback, "event is fully booked"
  end 
end

或者在模型中:

def save_if_space_left
  Booking.transaction do
    save!
    event.reload
    if event.bookings.count > event.number_of_spaces
      raise ActiveRecord::Rollback, "event is fully booked"
    else
      return true
    end
  end
  false
end

# So in the controller, you could do something like

if @booking.save_if_space_left
  # Successful
else 
  # Not successful
end