2016-06-23 3 views
1

レール4、ルビー2.3.1(noobのアラート)レール4使用paramsは(モデル)関数

Iは、レストラン予約アプリを有します。予約が保存される前に、利用可能なテーブルがあることを確認するためにdbをチェックする必要があります。これを行うには、フォームに選択した日付と時刻を数えます:

Reservation.where(r_date:params[:r_date],r_time:params[:r_time]).count < 3 

レストランには3つのテーブルがあるものとします。カウントが3より大きい場合、使用可能なテーブルはありません。

コントローラの@reservationからモデルのコールバック関数にパラメータを取得するにはどうすればよいですか?

+0

コントローラの '@ reservation' varはどこですか?「モデルのコールバック関数」とは何ですか?あなたが何を意味するかははっきりしない。 – Uzbekjon

答えて

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 

私はあなたが何か問題がある場合は私に知らせてください、このコードをテストする機会を持っていませんでした。

編集:説明

+0

ありがとうajpocus!このコールバックにフラッシュまたはエラーを追加するにはどうすればよいですか? – phillipjones1

+0

問題はありません@ phillipjones1!あなたは '' new''呼び出しの前に '' flash [:notice] = 'あなたのメッセージをここで ''設定することができます。 –

関連する問題