为什么我的实例变量(@ reservation.room)为零?

时间:2016-10-10 10:18:28

标签: ruby-on-rails

我目前正在使用rails 5.0.1中的预订系统。我有一个用户,房间和预订模型:

user.rb

has_many :reservations

room.rb

has_many :reservations

reservation.rb

belongs_to :user
belongs_to :room

reservation_controller.rb

class ReservationsController < ApplicationController
    before_action :authenticate_user!

    def create
        @reservation = current_user.reservations.create(reservation_params)

        redirect_to @reservation.room, notice: "Your reservation has been created"
    end

    private
        def reservation_params
            params.require(:reservation).permit(:start_date, :end_date, :price, :total, :room_id, :user_id)
        end
end

_form.html.erb(查看)

<%= form_for([@room, @room.reservations.new]) do |f| %>
    <%= f.text_field :start_date %>
    <%= f.text_field :end_date %>
    <%= f.hidden_field :room_id, value: @room_id %>
    <%= f.hidden_field :price, value: @room_price %>

    <br>
    <%= f.submit "Book Now", class: "btn btn-primary" %>
<% end %>

我收到此错误:

enter image description here

问题:

为什么我的@ reservation.room nil?

如果我输入rails控制台:@reserveration = current_user.reservations.create(reservation_params) 然后我得到: NameError:未定义的局部变量或方法`current_user&#39; for main:Object

如果您需要更多信息,请告诉我们!

2 个答案:

答案 0 :(得分:2)

  

为什么我的实例变量(@reservation)为零?

不是。 @reservation.room为零。

在你问“那为什么会这样?”之前,请检查你发布到行动的params。

答案 1 :(得分:0)

解决方案:

@room变​​量丢失,然后我必须合并它!

<强> reservation_controller.rb

synchronized {}