提交表单以从索引中执行 UPDATE 操作



我正在尝试创建一个允许用户直接从索引页编辑客户端条目的功能。当用户单击"编辑"时,将呈现一个部分,该部分将元素替换为输入文本字段。但是当按下"更新客户端"按钮时,我收到错误:

"No route matches [POST] "/clients/27"

我能够直接从索引创建新客户端并销毁客户端...我在更新操作中做错了什么?

部分:

<tr id="test">
  <%= form_for Client.find(27), :method => :PUT do |f| %>
    <td class="input">
      <%= f.text_field :name, :value => "Test" %>
    </td>
    <td class="input">
      <%= f.text_field :company %>
    </td>
    <td class="input">
      <%= f.text_field :email %>
    </td>
    <td class="grayedOut"></td>
    <td class="actions">
      <%= f.submit "Confirm edit" %>
    </td>
  <% end %>
</tr>

routes.rb 文件:

resources :clients do
  resources :projects do
    resources :items
  end
end

我想通了。无论出于何种原因,在表中嵌套表单似乎会弄乱表单提交的方式。当我在表外部呈现部分时,表单提交更新操作没有问题。

我仍然对为什么会发生这种情况感到困惑。我对这个问题的解决方案是使用div 而不是表格。

编辑:好的,所以我对这个话题进行了更多的研究,发现"表格"不是<table><tr>的有效子项。为了解决这个问题,我将<%= form_for %>标签放在第一个<td>内,将<% end %>标签放在最后一个<td>内。现在它工作得很好!这是我的部分现在的样子:

<tr id="test">
    <td class="input">
      <%= form_for Client.find(27), :method => :PUT do |f| %>
      <%= f.text_field :name, :value => "Test" %>
    </td>
    <td class="input">
      <%= f.text_field :company %>
    </td>
    <td class="input">
      <%= f.text_field :email %>
    </td>
    <td class="grayedOut"></td>
    <td class="actions">
      <%= f.submit "Confirm edit" %>
      <% end %>
    </td>
</tr>

最新更新