我正在使用Rails构建一个事件站点。我需要创建一个系统来监控正在进行的预订数量,以确保事件不会过度订阅。最有效(干)的方式是什么?在我的索引页面上,我列出了每个事件的主图像,事件标题和日期。我还希望包含一条跟踪消息,说明剩下多少个空格,例如剩下50个空格 - 现在预订"。
我已在我的预订控制器中尝试了此代码,但它无法正常工作 -
if @event.bookings.count >= @event.number_of_spaces
flash[:warning] = "Sorry, this event is fully booked."
redirect_to root_path
end
有更有效的方法吗?我有一个预订MVC设置。
答案 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