Ruby on rails:未定义的方法`[]'为nil:NilClass?

时间:2015-08-26 10:04:22

标签: ruby-on-rails nomethoderror actioncontroller

当我尝试创建它时说未定义的方法。

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

日志中生成的参数是

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 个答案:

答案 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_id课程中的密钥nil。 我建议你在这一点上撬开这些价值观。

EDIT1:

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

您的代码应该像

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

答案 1 :(得分:0)

尝试改变:

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

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

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

无错误地运行代码。您的此参数部分stock_id

中应该有"stockavailability"=>{"qty"=>"20", "price"=>"2000", "captured_at"=>"26/8/2015"},