Rails 4在回调(模型)函数中使用来自控制器的参数

时间:2016-06-23 04:21:40

标签: ruby-on-rails callback

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到模型中的回调函数获取参数?

1 个答案:

答案 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

我没有机会测试此代码,所以如果您有任何问题,请告诉我。

编辑:解释