2015-08-26 164 views
-2

當我嘗試創建它說未定義的方法。Ruby on rails:未定義的方法`[]'爲零:NilClass?

def create 
    @stock = Stock.find(params[:stock_availabilities][:stock_id]) 
    @stock_availability = StockAvailability.new(stock_availabilities_params) 
    respond_to do |format| 
     if @stock_availability.save 
      format.html { redirect_to stock_path(v_id: @volunteer.id), notice: "stock saved successfully" } 
     else 
      @stock_availabilities = StockAvailability.where(stock_id: @stock.id).all 
      format.html { render 'index' } 
     end 
    end 
end 

stock_availabilities屬於Stock表。 foreign keystock_id

在日誌中產生的params爲

Parameters: { 
    "utf8"=>"✓", 
    "authenticity_token"=>"ZWxRnGJqwLmhfosIhQ+xdLrG3HJXy1m/dHcizT+Y5+E=", 
    "stockavailability"=>{ 
     "qty"=>"20", 
     "price"=>"2000", 
     "captured_at"=>"26/8/2015" 
     }, 
    "commit"=>"Save Stockavailability" 
} 
    Completed 404 Not Found in 1ms 
+2

更新您的有問題的表格。 –

+1

請發佈錯誤日誌。 – Surya

+0

你通過什麼參數進入這個動作?你的形式和路線是什麼? –

回答

1

我有種再生您的問題

2.1.1 :003 > a=nil 
=> nil 
2.1.1 :004 > a['asd'] 
NoMethodError: undefined method `[]' for nil:NilClass 
    from (irb):4 
    from /home/illu/.rvm/rubies/ruby-2.1.1/bin/irb:11:in `<main>' 
2.1.1 :005 > 

在你的情況下,它可能 params[:stock_availabilities]是給nil和您試圖訪問密鑰:stock_idnil類。 我建議你在這個點上撬動數值。

EDIT1:

後在看看你的服務器日誌很顯然,你要訪問的關鍵stock_availabilities實際上是stockavailability

你的代碼應該像

# though no :stock_id key/value is found in your server log 
@stock = Stock.find(params[:stockavailability][:stock_id]) 
0

嘗試改變:

@stock = Stock.find(params[:stock_availabilities][:stock_id]) 

@stock = Stock.find(params[:stockavailability][:stock_id]) 

你這個問題會得到解決,但你會得到其他錯誤太多。因爲你沒有在參數中正確傳遞stock_id。因此,請嘗試在表單隱藏字段中設置它。

運行您的代碼沒有錯誤。你應該有stock_id在這個PARAM部分"stockavailability"=>{"qty"=>"20", "price"=>"2000", "captured_at"=>"26/8/2015"},

相關問題