ActiveRecord :: RecordNotНайдено в BookingsController # create Не удалось найти отель без идентификатора - PullRequest
1 голос
/ 09 января 2020

Это мой контроллер заказов. У меня возникла проблема при создании действия, я не могу получить идентификатор отеля. Мне нужно получить идентификатор отеля в контроллере бронирования действия создания. Я пробовал маршрутизацию членов, но столкнулся с проблемами в пути, мне нужен прямой подход для решения проблемы

class BookingsController < ApplicationController
  def new
    @hotel = Hotel.find(params[:hotel_id])
    @booking = Booking.new
    @single = Room.joins(:hotel).where("hotel_id = ?", params[:hotel_id]).pluck(:single_bedroom_num)
    @double = Room.joins(:hotel).where("hotel_id = ?", params[:hotel_id]).pluck(:double_bedroom_num)
    @suite = Room.joins(:hotel).where("hotel_id = ?", params[:hotel_id]).pluck(:suite_room_num)
    @dormitory = Room.joins(:hotel).where("hotel_id = ?", params[:hotel_id]).pluck(:dormitory_room_num)
    s = params[:single_bedroom_num]
    d = params[:double_bedroom_num]
    su = params[:suite_room_num]
    dor = params[:dormitory_room_num]
  end

  def index
  end

  def create
    @hotel = Hotel.find(params[:hotel_id])
    @booking = Booking.new(book_params)
    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, :room_id)
  end

end

Ответы [ 2 ]

1 голос
/ 09 января 2020

Прямой, но не мудрый подход передает hotel_id в параметрах, с которых вы выполняете действие контроллера. Например:

new_booking_path(hotel_id: hotel.id)

# hotel must be known here in view that is

# or you can name it anything like h or abc or xxx

Лучше использовать Restful маршрутизацию, например:

   resources :hotels do
      resources :bookings
   end
1 голос
/ 09 января 2020

на вашем пути, просто укажите hotel_id.

<%= form_for ... :url => xxx_path(hotel_id: @hotel.id)  %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...