rails 上的 Ruby:nil:NilClass 的未定义方法“[]”?

Ruby on rails: undefined method `[]' for nil: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 table。 foreign keystock_id

日志中生成的参数为

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

尝试更改:

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

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

你的这个问题会得到解决,但你也会遇到其他错误。因为您没有在参数中正确传递 stock_id 。因此,请尝试在表单隐藏字段中也进行设置。

为了运行你的代码没有错误。你应该在你的这个参数部分 stock_id "stockavailability"=>{"qty"=>"20", "price"=>"2000", "captured_at"=>"26/8/2015"},

我有点重生了你的问题

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 而您正在尝试访问 nil class 中的密钥 :stock_id。 我建议你撬开点值。

编辑 1:

查看您的服务器日志后,很明显您尝试访问的密钥 stock_availabilities 实际上是 stockavailability

你的代码应该像

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