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 key
是 stock_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])
当我尝试创建它时说未定义的方法。
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 key
是 stock_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])