我正在尝试创建一个允许用户直接从索引页面编辑客户端条目的功能。当用户单击“编辑”时,将呈现部分,用输入文本字段替换元素。但是当按下“更新客户端”按钮时,我收到错误:
"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
答案 0 :(得分:6)
我明白了。无论出于何种原因,在表格中嵌套表单似乎搞乱了表单提交的方式。当我在表格外部呈现部分内容时,表单提交更新操作没有问题。
为什么会发生这种情况,我仍然感到困惑。我对这个问题的解决方案是使用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>