首页 > 解决方案 > 参数丢失或值为空:但参数 IS 有一个值

问题描述

仅供参考,对 Rails 非常陌生

参数丢失或值为空:roster_id 提取的源(在第 83 行附近):81 82 83 84 85

  #  end
  def locker_params
    params.require(:roster_id).permit(:id,  :next_due, :notes, :key_num, :lockernum, :location, :row, :size, :memberID)
  end
end

应用程序跟踪 | 框架跟踪 | Full Trace app/controllers/lockers_controller.rb:83:in locker_params' app/controllers/lockers_controller.rb:52:inblock in update' app/controllers/lockers_controller.rb:51:in `update' 请求参数:

{"utf8"=>"✓",
 "_method"=>"patch",
 "authenticity_token"=>"uq6+5NchGu0or3JfIquY99goeg8uOQ5B2ttMTQ2O6mgE/aeoNyUT7Le+i+n/Ug5a44rwQkJ/ZhecTlJgnZzhtQ==",
 "locker"=>{"roster_id"=>"199", "location"=>"FrontL    "},
 "commit"=>"Update Locker",
 "id"=>"573"}

正如您在请求中看到的,参数 roster_id 在请求中并且确实有一个值。

该表单使用从名册表构建的数组

    <div class="actions">
  <%= form.collection_select(:roster_id,@rosters.all, :id, :formatted_name)  %>
  Location <%= form.text_field :location %>
    <%= form.submit %>
  </div>

我错过了什么。如果我删除 .require 并将 roster_id 添加到许可证中,则表单不会出错,但表不会更新。

标签: ruby-on-rails

解决方案


我认为您试图要求错误的参数,因此您的locker_params方法返回空。尝试:

params.require(:locker).permit(:roster_id, :location...)


推荐阅读