2016-07-05 93 views
0

我有一個充當各種停車場的網頁。 /新是我們可以增加車的「停車場」的頁面,但在提交表單的時候我遇到控制器上此錯誤:Ruby on Rails-Param缺失或者值爲空

參數是丟失或爲空值:行車記錄

這裏爲控制器代碼:

class CarLogsController < ApplicationController 
    def index 
    end 

    def new 
    @carlog = CarLog.new 
    end 

    def create 
    @carlog = CarLog.new(carlog_params) #Error here 
    end 

    def carlog_params 
    params.require(:carlog).permit! #Error here 
    end 

    def show 
    @carlogs = CarLog.all 
    end 

    def destroy 
    @carlog= CarLog.find(params[:id]) 
    @carlog.destroy() 

    redirect_to show_path 
    end 
end 

這個頁面的相應的視圖代碼是這樣的

<h1>New</h1> 
<%= form_tag "/carlogs/create" do %> 
<p>Plate number: 
<input type="text" name="platenumber" /></p> 
<p>Brand: 
<select name="brand"> 
<option value="Toyota">Toyota</option> 
<option value="Honda">Honda</option> 
<option value="BMW">BMW</option> 
</select></p> 
<p>Slot number 
<input type="text" name="slotnumber" /> </p> 
<p><input type="checkbox" name="istaken" value="true" /> Is taken?</p> 
<input type="submit" value="Submit" /> 
<% end %> 

感謝您的幫助

+0

爲什麼你不使用rails的機器來建立表單? 'form_for','f.select'和他們的朋友? –

+0

另外,使用'permit!'?這破壞了參數白名單的目的(這是該方法的目的) –

回答

1

請更新您的方法,如下所示。

def carlog_params 
    params.require(:carlog).permit(:platenumber,:brand,:slotnumber,:istaken) 
end 

並用此更新您的表單。

<h1>New</h1> 
<%= form_tag "/carlogs/create" do %> 
    <p>Plate number: 
    <input type="text" name="carlog[platenumber]" /> 
    </p> 
    <p>Brand: 
    <select name="carlog[brand]"> 
     <option value="Toyota">Toyota</option> 
     <option value="Honda">Honda</option> 
     <option value="BMW">BMW</option> 
    </select> 
    </p> 
    <p>Slot number 
    <input type="text" name="carlog[slotnumber]" /> 
    </p> 
    <p> 
    <input type="checkbox" name="carlog[istaken]" value="true" /> Is taken? 
    </p> 
    <input type="submit" value="Submit" /> 
<% end %> 

我建議請使用rails窗體及其輸入標籤的形式。不要使用純html表單。

2

<input type="text" name="carlog[platenumber]" /></p> 

名稱應具有carlog[platenumber]我認爲是缺少。

+0

我做了你所說的。該錯誤現在讀取:CarLog的未知屬性「platenumber」。 – Kevin

+0

@凱文:好吧,看來你的carlog對象沒有platenumber屬性 –

1

兩個直接更正:

你應該更改爲:

def carlog_params 
    params.permit! # or to be explicit params.permit(:platenumber, :brand, :slotnumber, :istaken) 
end 

然後,如果你正在使用的鐵軌路由器,你的行動不應該去carlogs/create,而/carlogs

#routes.rb 
resources :carlogs, only: [:create] 

如果您將模型綁定到表單上,則需要params.require,其中form_for

1

此錯誤表示此參數名稱在您的params散列中不可用。這可能是由於您沒有將form_for元素直接綁定到您在新方法中創建的@carlog對象。在你做任何事情檢查params散列之前,看看裏面有什麼可用的值。

你的form_for應該是這樣的,例如,

<%= form_for @carlog do |f| %> 

    <%= f.text_field :name %> 

    <%= f.submit "Submit" %> 

<% end %> 
2

其實視圖代碼實際上是違反了軌道的標準,因爲它沒有爲綁定到資源,理想情況下,如果你的表單綁定到資源你不會有這個問題。檢查附加的代碼,

<h1>New</h1> 
<%= form_for @carlog do |f| %> 

    <%= f.text_field :platenumber %> 
    <%= f.select :brand, [['Toyota', 'Toyota'], ['Honda', 'Honda'], ['BMW', 'BMW']] %> 
    <%= f.text_field :slotnumber %> 
    <%= f.check_box :istaken %> 

    <%= f.submit "Submit" %> 
<% end %>