2017-09-24 82 views
0

確定 - 這將需要一段時間來解釋這個問題,包涵:參數是丟失或爲空值:預訂

我正在下面就如何開發製作的Airbnb的教程。作爲預留模型的一部分,它具有start_date/end_date,這兩個用於保留控制器私有操作中。

private 
     def reservation_params 
      params.require(:reservation).permit(:start_date, :end_date) 
     end 

本教程將解釋如何在預留視圖下創建表單,然後將在房間頁面上使用該表單。

預訂/ _form.html.erb

<%= form_for([@room, @room.reservations.new]) do |f| %> 
      <div class="row"> 
      <div class="col-md-6"> 
       <label>Check In</label> 
       <%= f.text_field :start_date, readonly: true, placeholder: "Start Date", class: "form-control datepicker" %> 
      </div> 
      <div class="col-md-6"> 
       <label>Check Out</label> 
       <%= f.text_field :end_date, readonly: true, placeholder: "End Date", class: "form-control datepicker", disabled: true %> 
      </div> 
      </div> 
    : 
    : 
    : 

    <%= f.submit "Book Now", id: "btn_book", class: "btn btn-normal btn-block", disabled: true %> 
     <% end %> 

我嘗試的過程中適應我的目的。我不需要開始/結束日期。我需要用戶做的是點擊按鈕購買,以完成購買(價格和數量是固定的)。因此,這裏是我,雖然我會做(顯然現在沒有成功)

ReservationsController:

private 
     def reservation_params 
      params.require(:reservation) 
     end 

預訂/ _form.html.erb

<%= form_for([@room, @room.reservations.new]) do |f| %> 
    <%= f.submit "Book Now", id: "btn_book", class: "btn btn-normal btn-block", disabled: true %> 
<% end %> 

這樣做的結果是:PARAM是遺漏的或價值是空的:預訂

問題:應該如何使用參數。在沒有.permit部分的私人聲明?我整體做錯了什麼?

謝謝。

+0

使用'binding.pry'來調試你的程序,檢查傳入的'params'數組並找出你的參數在哪裏,然後找出它們爲什麼不在你認爲的位置。 – meagar

回答

1

應該如何使用參數。在沒有.permit部分的私人聲明?

如果不提交任何參數,可以不需要reservation_params,這就需要params包含非空reservation(這意味着,一個關鍵reservation,具有非空值)。

在提交時,你可以創建在控制器方法reservation(我假設的create一個):

def create 
    @room.reservation.create! 
    ... 
end 

現在,我想,該方法具有類似@room.reservation.new(reservation_params),這是沒有用的因爲reservation_params是空的。

+0

它工作!非常感謝你。我刪除了私有參數並將創建操作重構爲@reservation = current_user.reservations.build。 – Lily

相關問題