2

我正在尝试将编辑几个 Shift 对象的 form_tag 放在一起。我已经正确构建了表单,并且它传递了正确的参数。我已经验证这些参数可以在控制台中正确更新对象。但是,当我单击提交按钮时,出现错误:

ActiveRecord::RecordNotFound in ShiftsController#update_individual
Couldn't find Shift without an ID

我正在调用的控制器的路由如下所示:

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?

4

2 回答 2

1

我认为您需要告诉表单标签助手您要使用 PUT 而不是 POST

<% form_tag( update_individual_shifts_path, :method => :put) do %>
  ... fields ....
  <%= submit_tag "Save" %>
<% end %>
于 2010-03-31T19:42:08.773 回答
0

令人惊讶的是,事实证明我能够通过重命名方法和传递一个虚拟变量的组合来解决这个问题。更改是以下行:

form.html.erb:

<% form_tag( poop_individual_shifts_path ) do %>

路线.rb:

map.poop_individual_shifts "poop_shifts", :controller => 'shifts', :action => "poop_individual", :method => "put", :id => 4
map.resources :shifts 

我每次都给它传递一个 ID 4,没关系,它实际上并没有对它去抓取的 shift 对象做任何事情,它只是......我不知道,我猜是一个 hack。

shifts_controller.rb:

def poop_individual
于 2010-04-01T15:41:13.657 回答