освобождение номеров после выезда пользователя в систему бронирования отелей с использованием рельсов - PullRequest
0 голосов
/ 17 января 2020

В моей системе бронирования отелей есть таблица номеров, которая имеет 4 типа номеров, связанных с конкретным отелем. Когда я бронирую номера, например, если я бронирую 2 односпальные кровати и 1 спальню с двуспальной кроватью, то свободные номера вычитаются. Моя проблема, когда пользователь выписывается, т.е. если дата отъезда> = сегодня, то я хочу получить забронированные номера обратно. Как я могу это сделать. это моя ассоциация:

class Booking < ApplicationRecord
  belongs_to :hotel
  belongs_to :user
  validate :check_out_greater_than_check_in
end

class Hotel < ApplicationRecord
    has_one :room, dependent: :destroy
    has_many :bookings
    belongs_to :city
    validates :name, presence: true, uniqueness: true
    scope :search_it, ->(s_term) { where("name LIKE ? OR city LIKE ?", "%#{s_term}%", "%#{s_term}%") }
    has_attached_file :picture, styles: {large: "500x500>", medium: "300x300>", thumb: "150x150#"}
    validates_attachment_content_type :picture, content_type: %r{\Aimage\/.*\z}
    validates_attachment_presence :picture
end

class Room < ApplicationRecord
  belongs_to :hotel
end

это мой контролер заказов:

class BookingsController < ApplicationController
  before_action :current_hotel, except: [:new]
  after_action :alter_rooms, only: [:create]

  def new
    @booking = Booking.new
    @single = Room.joins(:hotel).where("hotel_id = ?", params[:hotel_id]).pluck(:single_bedroom_num)
    @s = @single[0].to_i
    @double = Room.joins(:hotel).where("hotel_id = ?", params[:hotel_id]).pluck(:double_bedroom_num)
    @d = @double[0].to_i
    @suite = Room.joins(:hotel).where("hotel_id = ?", params[:hotel_id]).pluck(:suite_room_num)
    @sui = @suite[0].to_i
    @dormitory = Room.joins(:hotel).where("hotel_id = ?", params[:hotel_id]).pluck(:dormitory_room_num)
    @dor = @dormitory[0].to_i
    s = params[:single_bedroom_num]
    d = params[:double_bedroom_num]
    su = params[:suite_room_num]
    dor = params[:dormitory_room_num]
    session[:hotel_id] = params[:hotel_id]
    @hotel = current_hotel
  end

  def index
  end

  def create
    @hotel = current_hotel.id
    @booking = @hotel.bookings.build(book_params)
    if signed_in?
      params[:user_id] = current_user
    else
      authorize 
    end
    if @booking.save
      flash.now.alert = "booked successfully!"
      redirect_to root_path
    else
      flash.now.alert = "Oops, couldn't book."
      render :new
    end

  end

  def show
    @hotel = Hotel.find(params[:hotel_id])
    check_in = params[:check_in_date]
    check_out = params[:check_out_date]
    @single = Room.single_bedroom_num
    @booking = Booking.find(params[:id])
  end

  private

  def book_params
    params.require(:booking).permit(:id, :num_of_guests, :guest_name, :check_in_date, :check_out_date, :single_bedroom_num, :double_bedroom_num, :suite_room_num, :dormitory_room_num, :hotel_name, :hotel_id, :user_id)
  end
  def current_hotel
    @current_hotel ||= Hotel.find(session[:hotel_id])
  end
  def alter_rooms

    @single = Room.joins(:hotel).where("hotel_id = ?", session[:hotel_id]).pluck(:single_bedroom_num)
    s = @single[0].to_i
    @double = Room.joins(:hotel).where("hotel_id = ?", session[:hotel_id]).pluck(:double_bedroom_num)
    d = @double[0].to_i
    @suite = Room.joins(:hotel).where("hotel_id = ?", session[:hotel_id]).pluck(:suite_room_num)
    sui = @suite[0].to_i
    @dormitory = Room.joins(:hotel).where("hotel_id = ?", session[:hotel_id]).pluck(:dormitory_room_num)
    dor = @dormitory[0].to_i

    @so = @booking.single_bedroom_num
    s_new = @so.to_i
    @duo = @booking.double_bedroom_num
    d_new = @duo.to_i
    @suio = @booking.suite_room_num
    sui_new = @suio.to_i
    @doro = @booking.dormitory_room_num
    dor_new = @doro.to_i
    h_id = @booking.hotel_id.to_i

    s_res = (s - s_new).to_i
    d_res = (d - d_new).to_i
    sui_res = (sui - sui_new).to_i
    dor_res = (dor - dor_new).to_i
    @room = Room.find_by(hotel_id: h_id)
    @room.update_attributes(single_bedroom_num: s_res, double_bedroom_num: d_res, suite_room_num: sui_new, dormitory_room_num: dor_new )
  end

end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...