【发布时间】:2016-10-25 23:43:43
【问题描述】:
由于某种原因,Heroku 没有传递参数,这给了我一个 NoMethod 错误。
这是我的控制器创建操作:
def create
# @stock = Stock.new(params[:data].keys, params[:data].values)
@user = current_user
@data = params["data"]
@data.each do |d|
@stock = Stock.create(my_params(d))
if @stock.altas == nil && @stock.bajas == nil
@stock.destroy
else
@stock.save
end
@item = Item.find(@stock.item_id)
if @stock.altas != nil
@item.quantity = @item.quantity + @stock.altas
@item.save
end
if @stock.bajas != nil
@item.quantity = @item.quantity - @stock.bajas
@item.save
end
end
# ItemMailer.reporte_diario_email(@user).deliver_now
redirect_to change_path, notice: 'Cambio en el inventario creado.'
end
表单传递了params["data"],这是我在localhost上的日志,显示param传递了:
Processing by StocksController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>
"BB/8I4Bypwa8aga8x7wCi6QWF2I9tPTuWbIitYpdpESCvOeFfPnDuaf7PjFYkjuzuz6N45t9phdbVZ1QNB3DeA==", "data"=>[{"altas"=>"", "bajas"=>"", "item_id"=>"1"}, {"altas"=>"5", "bajas"=>"", "item_id"=>"5"}, {"altas"=>"", "bajas"=>"", "item_id"=>"3"},
{"altas"=>"2", "bajas"=>"", "item_id"=>"2"}, {"altas"=>"", "bajas"=>"",
"item_id"=>"4"}], "commit"=>"Update"}
这是heroku上的日志:
Processing by StocksController#create as HTML
2016-10-25T23:23:32.440253+00:00 app[web.1]: Parameters: {"utf8"=>"✓", "authenticity_token"=>"wye0t6tc1BQV15WgQsoVsnvSuwMwA8bCT77JWRqsuRNikVSq+OGhed5oIGczCmdGHl0/f+Y4/KL/YVEOOrzv/g==", "commit"=>"Update"}
最后,这是需要时的表格:
<%= form_tag stocks_path do %>
<% @items.each do |item| %>
<%= fields_for 'data[]', @stock do |stock| %>
<tr>
<td><%= item.nombre %></td>
<td><center><%= item.material %></center></td>
<td><center><%= item.marca %></center></td>
<td><center><%= item.espesor %> mm</center></td>
<td><center><%= stock.text_field :altas %></center></td>
<td><center><%= stock.text_field :bajas %></center></td>
<%= stock.hidden_field :item_id, :value => item.id %>
<% end %>
<% end %>
</tr>
</table>
<div class="form-group">
<div class="col-sm-offset-3 col-sm-5">
<%= submit_tag "Update", class: "btn btn-primary" %>
<% end %>
如您所见,它根本没有传递 params["data"],不知道为什么,因为它的代码相同......有什么猜测吗?
在此尝试中,几分钟后,参数已加载:
2016-10-25T23:53:24.972488+00:00 app[web.1]: Started POST "/stocks" for 65.34.251.106 at 2016-10-25 23:53:24 +0000
2016-10-25T23:53:24.980412+00:00 app[web.1]: Processing by StocksController#create as HTML
2016-10-25T23:53:24.980989+00:00 app[web.1]: Parameters: {"utf8"=>"✓", "authenticity_token"=>"wye0t6tc1BQV15WgQsoVsnvSuwMwA8bCT77JWRqsuRNikVSq+OGhed5oIGczCmdGHl0/f+Y4/KL/YVEOOrzv/g==", "data"=>[{"altas"=>"", "bajas"=>"", "item_id"=>"48"}, {"altas"=>"", "bajas"=>"", "item_id"=>"49"}, {"altas"=>"", "bajas"=>"", "item_id"=>"50"}, {"altas"=>"", "bajas"=>"", "item_id"=>"51"}, {"altas"=>"", "bajas"=>"", "item_id"=>"52"}, {"altas"=>"", "bajas"=>"", "item_id"=>"53"}, {"altas"=>"", "bajas"=>"", "item_id"=>"54"}, {"altas"=>"", "bajas"=>"", "item_id"=>"55"}, {"altas"=>"", "bajas"=>"", "item_id"=>"56"}, {"altas"=>"", "bajas"=>"", "item_id"=>"57"}, {"altas"=>"", "bajas"=>"", "item_id"=>"58"}, {"altas"=>"", "bajas"=>"", "item_id"=>"59"}, {"altas"=>"", "bajas"=>"", "item_id"=>"60"}, {"altas"=>"", "bajas"=>"", "item_id"=>"61"}, {"altas"=>"", "bajas"=>"", "item_id"=>"62"}, {"altas"=>"", "bajas"=>"", "item_id"=>"63"}, {"altas"=>"", "bajas"=>"", "item_id"=>"64"}, {"altas"=>"", "bajas"=>"", "item_id"=>"65"}, {"altas"=>"", "bajas"=>"", "item_id"=>"66"}, {"altas"=>"", "bajas"=>"", "item_id"=>"67"}, {"altas"=>"", "bajas"=>"", "item_id"=>"68"}, {"altas"=>"", "bajas"=>"", "item_id"=>"69"}, {"altas"=>"", "bajas"=>"", "item_id"=>"70"}, {"altas"=>"", "bajas"=>"", "item_id"=>"71"}, {"altas"=>"", "bajas"=>"", "item_id"=>"72"}, {"altas"=>"", "bajas"=>"", "item_id"=>"73"}, {"altas"=>"", "bajas"=>"", "item_id"=>"74"}, {"altas"=>"", "bajas"=>"", "item_id"=>"75"}, {"altas"=>"", "bajas"=>"", "item_id"=>"76"}, {"altas"=>"", "bajas"=>"", "item_id"=>"77"}, {"altas"=>"", "bajas"=>"", "item_id"=>"78"}, {"altas"=>"", "bajas"=>"", "item_id"=>"79"}, {"altas"=>"", "bajas"=>"", "item_id"=>"80"}, {"altas"=>"", "bajas"=>"", "item_id"=>"81"}, {"altas"=>"", "bajas"=>"", "item_id"=>"82"}, {"altas"=>"", "bajas"=>"", "item_id"=>"83"}, {"altas"=>"", "bajas"=>"", "item_id"=>"84"}, {"altas"=>"", "bajas"=>"", "item_id"=>"85"}, {"altas"=>"", "bajas"=>"", "item_id"=>"2"}, {"altas"=>"", "bajas"=>"", "item_id"=>"6"}, {"altas"=>"", "bajas"=>"", "item_id"=>"3"}, {"altas"=>"", "bajas"=>"", "item_id"=>"4"}, {"altas"=>"", "bajas"=>"", "item_id"=>"1"}, {"altas"=>"", "bajas"=>"", "item_id"=>"86"}, {"altas"=>"", "bajas"=>"", "item_id"=>"7"}, {"altas"=>"", "bajas"=>"", "item_id"=>"8"}, {"altas"=>"", "bajas"=>"", "item_id"=>"9"}, {"altas"=>"", "bajas"=>"", "item_id"=>"10"}, {"altas"=>"", "bajas"=>"", "item_id"=>"11"}, {"altas"=>"", "bajas"=>"", "item_id"=>"12"}, {"altas"=>"", "bajas"=>"", "item_id"=>"13"}, {"altas"=>"", "bajas"=>"", "item_id"=>"14"}, {"altas"=>"", "bajas"=>"", "item_id"=>"15"}, {"altas"=>"", "bajas"=>"", "item_id"=>"16"}, {"altas"=>"", "bajas"=>"", "item_id"=>"17"}, {"altas"=>"", "bajas"=>"", "item_id"=>"18"}, {"altas"=>"", "bajas"=>"", "item_id"=>"19"}, {"altas"=>"", "bajas"=>"", "item_id"=>"20"}, {"altas"=>"", "bajas"=>"", "item_id"=>"21"}, {"altas"=>"", "bajas"=>"", "item_id"=>"22"}, {"altas"=>"", "bajas"=>"", "item_id"=>"23"}, {"altas"=>"", "bajas"=>"", "item_id"=>"24"}, {"altas"=>"", "bajas"=>"", "item_id"=>"25"}, {"altas"=>"", "bajas"=>"", "item_id"=>"26"}, {"altas"=>"", "bajas"=>"", "item_id"=>"27"}, {"altas"=>"", "bajas"=>"", "item_id"=>"28"}, {"altas"=>"", "bajas"=>"", "item_id"=>"29"}, {"altas"=>"", "bajas"=>"", "item_id"=>"30"}, {"altas"=>"", "bajas"=>"", "item_id"=>"31"}, {"altas"=>"", "bajas"=>"", "item_id"=>"32"}, {"altas"=>"", "bajas"=>"", "item_id"=>"33"}, {"altas"=>"", "bajas"=>"", "item_id"=>"34"}, {"altas"=>"", "bajas"=>"", "item_id"=>"35"}, {"altas"=>"", "bajas"=>"", "item_id"=>"36"}, {"altas"=>"", "bajas"=>"", "item_id"=>"37"}, {"altas"=>"", "bajas"=>"", "item_id"=>"38"}, {"altas"=>"", "bajas"=>"", "item_id"=>"39"}, {"altas"=>"", "bajas"=>"", "item_id"=>"40"}, {"altas"=>"", "bajas"=>"", "item_id"=>"41"}, {"altas"=>"", "bajas"=>"", "item_id"=>"42"}, {"altas"=>"", "bajas"=>"", "item_id"=>"43"}, {"altas"=>"", "bajas"=>"", "item_id"=>"44"}, {"altas"=>"", "bajas"=>"1", "item_id"=>"45"}, {"altas"=>"", "bajas"=>"", "item_id"=>"46"}, {"altas"=>"", "bajas"=>"", "item_id"=>"87"}, {"altas"=>"", "bajas"=>"", "item_id"=>"88"}, {"altas"=>"", "bajas"=>"", "item_id"=>"89"}, {"altas"=>"", "bajas"=>"", "item_id"=>"90"}, {"altas"=>"", "bajas"=>"", "item_id"=>"47"}], "commit"=>"Update"}
2016-10-25T23:53:27.334490+00:00 heroku[router]: at=info method=POST path="/stocks" host=herrajestorino.herokuapp.com request_id=f1bda6e7-6fca-4150-8dae-056de5892991 fwd="65.34.251.106" dyno=web.1 connect=1ms service=2507ms status=302 bytes=1028
这是控制器上的新操作:
def new
@stock = Stock.new
@items = Item.all
end
【问题讨论】:
-
这更奇怪,它是随机的,有时它会通过参数,而其他的则不会......
-
请发布错误信息。首先怀疑是您的 Heroku 数据库中没有任何条目,而您的开发数据库有,这就是您没有发现错误的原因。此外,您正在显示未创建更新操作的参数。尝试创建一个正在开发的新股票并向我们展示
createing 新股票的参数,而不是updateing 现有股票。 -
"Update" 是按钮的名称,它与错误无关,关于错误,是 NoMethodError (undefined method "each" for nil class) 这是因为参数没有传递,我又试了几次,其中一次通过了参数并保存了更改,所以我不考虑它的代码相关和更多的heroku相关......
-
@Kelseydh 关于您从本地主机传递参数以创建股票的日志中的问题,因为您可以看到提交时都说“更新”
-
您能否发布您用于初始化表单的控制器方法,因为如果表单使用
@stock或@item为nil 进行初始化,我可以看到这是一个问题。
标签: ruby-on-rails ruby forms heroku controller