Ruby on rails ActiveRecord::RecordNotFound in BookingsController#create无法';我找不到没有身份证的旅馆
这是我的预订管理员 我在创建过程中遇到了问题,我无法在那里获得酒店id。 我需要在创建操作的预订控制器中获取酒店id。 我尝试了成员路由,但在路径中遇到了问题,我需要一种直接的方法来解决问题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
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@RomanAlekseievHotel.find
的唯一合理用法是确保酒店确实存在,即您不能操纵参数为不存在的酒店意外创建预订。然而,有人可能认为这是一个模型验证,而不是在控制器中处理的东西。。。正如您所说,@hotel
变量似乎未使用。