Rails 4,Ruby 2.3.1(noob alert)
我有一个餐厅预订应用程序。在保存预订之前,我需要检查数据库以确保有可用的表。为此,我使用计数检查表单中选择的日期和时间:
Reservation.where(r_date:params[:r_date],r_time:params[:r_time]).count < 3
假设餐厅有3张桌子。如果计数超过3,那么就没有可用的表。
如何从控制器中的@reservation到模型中的回调函数获取参数?
答案 0 :(得分:1)
如果没有可用的表,您可以使用before_save
方法检查可用性,并使模型无效,取消保存。
在您的控制器中:
class ReservationsController < ApplicationController
def create
@reservation = Reservation.new(reservation_params)
if @reservation.save
redirect_to reservation_path(@reservation)
else
render 'new'
end
end
private
def reservation_params
params[:reservation].permit(:r_date, :r_time)
end
end
然后,在你的模型中:
class Reservation < ActiveRecord::Model
before_save :check_availability
private
def check_availability
reservation_count = Reservation.where(r_date: self.r_date, r_time: self.r_time).count
if reservation_count > 3
return false
end
end
end
我没有机会测试此代码,所以如果您有任何问题,请告诉我。
编辑:解释