【问题标题】:Ruby on rails: undefined method `[]' for nil:NilClass?Ruby on rails:nil:NilClass 的未定义方法“[]”?
【发布时间】:2015-08-26 10:04:22
【问题描述】:

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

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

【问题讨论】:

  • 更新您的相关表单。
  • 请发布错误日志。
  • 你在这个动作中传递了什么参数?你的形式和路线是什么?
  • 于 2015-08-26 15:42:39 +0530 开始 POST "/stockavailabilities" for 127.0.0.1 +0530 由 StockavailabilitiesController#create 作为 HTML 参数处理:{"utf8"=>"✓", "authenticity_token"=>"ZWxRnGJqwLmhfosIhQ+xdLrG3HJXy1m/dHcizT+Y5+E=", "库存"=>{"数量"=>"20", "价格"=>"2000", "captured_at"=>"26/ 8/2015"}, "commit"=>"Save Stockavailability"} Completed 404 Not Found in 1ms ActiveRecord::RecordNotFound (找不到没有 ID 的 Stock): app/controllers/stockavailabilities_controller.rb:9:in `create '

标签: ruby-on-rails nomethoderror actioncontroller


【解决方案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 并且您正在尝试访问 nil 类中的密钥 :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])

【讨论】:

    【解决方案2】:

    尝试改变:

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

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

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

    无错误地运行您的代码。你的这个参数部分应该有stock_id"stockavailability"=&gt;{"qty"=&gt;"20", "price"=&gt;"2000", "captured_at"=&gt;"26/8/2015"},

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-21
      • 1970-01-01
      • 1970-01-01
      • 2016-12-15
      相关资源
      最近更新 更多