未定义的方法'预订'为零:NilClas

时间:2015-06-06 11:17:32

标签: ruby-on-rails ruby

我正在使用嵌套路线,我有:预订表和:酒店表 在我的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

2 个答案:

答案 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