【问题标题】:Submit a form to execute the UPDATE action from within the index提交表单以从索引中执行 UPDATE 操作
【发布时间】:2012-11-21 02:22:07
【问题描述】:

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

"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

【问题讨论】:

  • 你检查过 config/routes.rb 吗?
  • 试试:method =&gt; :put,而不是:PUT。
  • 如果这不起作用,您可以发布您的 rake 路线吗?
  • 我也尝试过 :method => :put 但没有帮助。我目前在我的工作计算机上,所以我无法访问“rake routes”,但我的 routes.rb 文件非常标准。外观如下:resources :clients do resources :projects do resources :items end end

标签: ruby-on-rails ruby ruby-on-rails-3 forms


【解决方案1】:

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

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

编辑:好的,所以我对该主题进行了更多研究,发现“表单”不是&lt;table&gt;&lt;tr&gt; 的有效子代。为了解决这个问题,我将&lt;%= form_for %&gt; 标签放在第一个&lt;td&gt; 内,将&lt;% end %&gt; 标签放在最后一个&lt;td&gt; 内。现在它工作得很好!这是我的部分现在的样子:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    相关资源
    最近更新 更多