我正在使用嵌套路线,我有:预订表和:酒店表 在我的routes.rb
resources :hotels do
resources :bookings
end
在我的酒店show.html。 ERB
<%= link_to 'Book Now', new_booking_path(:hotel_id => @hotel.id) %>
在我的bookings_controller.rb
中def new
@booking = @hotel.bookings.build
end
点击链接后,会生成一个链接
localhost:3000/bookings/new?hotel_id=4
但我仍然收到错误
NoMethodError
Undefined method 'bookings' for nil:NilClass
Extracted source from
def new
@booking = @hotel.bookings.build
end
答案 0 :(得分:1)
您似乎没有在控制器的new
方法中检索酒店对象。因此,当您在@hotel变量上调用bookings
时,将抛出nil异常。它应该看起来像:
<强> bookings_controller.rb:强>
def new
@hotel = Hotel.find(params[:hotel_id])
@booking = @hotel.bookings.build
end
希望它有所帮助!
答案 1 :(得分:0)
我认为你在这里找到@hotel是错误的,请这样做 -
在bookings_controller.rb中 -
def new
@hotel = Hotel.find(params[:hotel_id])
if @hotel.present?
@booking = @hotel.bookings.build
render :new
else
redirect_to root_path
end
end