Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails ActiveRecord::RecordNotFound in BookingsController#create无法';我找不到没有身份证的旅馆_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails ActiveRecord::RecordNotFound in BookingsController#create无法';我找不到没有身份证的旅馆

Ruby on rails ActiveRecord::RecordNotFound in BookingsController#create无法';我找不到没有身份证的旅馆,ruby-on-rails,ruby,Ruby On Rails,Ruby,这是我的预订管理员 我在创建过程中遇到了问题,我无法在那里获得酒店id。 我需要在创建操作的预订控制器中获取酒店id。 我尝试了成员路由,但在路径中遇到了问题,我需要一种直接的方法来解决问题 class BookingsController < ApplicationController def new @hotel = Hotel.find(params[:hotel_id]) @booking = Booking.new @single = Room.joi

这是我的预订管理员 我在创建过程中遇到了问题,我无法在那里获得酒店id。 我需要在创建操作的预订控制器中获取酒店id。 我尝试了成员路由,但在路径中遇到了问题,我需要一种直接的方法来解决问题

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

class BookingsController
在视图的发布路径中,只需提供酒店id即可

<%= form_for ... :url => xxx_path(hotel_id: @hotel.id)  %>
xxx\u路径(hotel\u id:@hotel.id)%>

直接但非明智的方法是在参数中传递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

如果您在行动中不使用
@hotel
,为什么需要它?另外,请显示参数散列或尝试将
:hotel_id
作为
预订参数[:hotel_id]
如果它出现在允许的参数中hash@RomanAlekseiev
Hotel.find
的唯一合理用法是确保酒店确实存在,即您不能操纵参数为不存在的酒店意外创建预订。然而,有人可能认为这是一个模型验证,而不是在控制器中处理的东西。。。正如您所说,
@hotel
变量似乎未使用。