我正在尝试将编辑多个 Shift 对象的 form_tag 放在一起。我已经正确构建了表单,并且传递了正确的参数。我已验证这些参数可以在控制台中正确更新对象。但是,当我单击提交按钮时,出现错误:
ActiveRecord::RecordNotFound in ShiftsController#update_individual
Couldn't find Shift without an ID
它正在调用的 Controller 的路由看起来像这样:
map.resources :shifts, :collection => { :update_individual => :put }
ShiftsController中的方法是这样的:
def update_individual
Shift.update(params[:shifts].keys, params[:shifts].values)
flash[:notice] = "Schedule saved"
end
相关的表单部分是这些:
<% form_tag( update_individual_shifts_path ) do %>
... (fields for...)
<%= submit_tag "Save" %>
<% end %>
为什么这不起作用?如果我浏览到 url:“http://localhost:3000/shifts/update_individual/5”(或与现有类次相对应的任何数字),我会收到有关未设置参数的正确错误,但是当我传递没有某种 ID 的参数时,它会出错.
如何让它停止在 URL 末尾查找 ID?
最佳答案
我认为你需要告诉表单标签助手你想使用 PUT 而不是 POST
<% form_tag( update_individual_shifts_path, :method => :put) do %>
... fields ....
<%= submit_tag "Save" %>
<% end %>
关于ruby-on-rails - 调用没有 ID 的新方法的路由问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2555847/