【问题标题】:Passing a param works locally but not on Heroku传递参数在本地有效,但在 Heroku 上无效
【发布时间】: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


【解决方案1】:

问题已修复,不知道为什么,但是一旦按下引导可排序表就会删除参数,这就是它随机运行的原因,我没有注意到有时我按下按钮对它们进行排序而其他人没有,一旦我想到这一点出来,我删除了可排序的类并改为在控制器中进行排序,现在它实际上看起来更好了,这就是控制器的变化,以备不时之需:

def new
@stock = Stock.new
@items = Item.all.order(:nombre).order(:material).order(:marca).order(:espesor)
end

解决了! 非常感谢您的帮助!!

【讨论】:

    猜你喜欢
    • 2020-11-04
    • 2022-07-24
    • 2017-11-27
    • 1970-01-01
    • 2017-03-26
    • 2022-01-18
    • 1970-01-01
    • 1970-01-01
    • 2017-03-14
    相关资源
    最近更新 更多