简体   繁体   中英

Passing a param works locally but not on Heroku

For some reason, Heroku doesnt pass the param, which gives me a NoMethod error.

This is my controller create action:

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

The form passes the params["data"], this is my log on localhost, showing that the param passed:

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"}

And this is the log on 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"}

Finally, this is the form in case needed:

 <%= 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 %>

As you can see, it's not passing the params["data"] at all, not sure why, since its the same code... any guesses?

On this try, a few minutes later, the param was loaded:

  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

This is the new action on the controller:

def new
 @stock = Stock.new
 @items = Item.all
end

The issue was fixed, not sure why, but bootstrap sortable table removes the params once is pressed, thats why it was acting randomly, i didnt notice that sometimes i pressed the button to sort them and others dont, once i figured this out, i remove the sortable class and make the order in the controller instead, and it actually looks better now, this is how the controller changed, in case needed:

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

That fixed it! thanks a lot for your help!!

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM