1

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

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

1 回答 1

7

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

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

编辑:好的,所以我对该主题进行了更多研究,发现“表单”不是<table>or的有效子级<tr>。为了解决这个问题,我把<%= form_for %>标签放在 first 里面,<td><% end %>标签放在 last 里面<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>
于 2012-11-24T19:20:20.063 回答