0

我有一个 Rails 应用程序,每次您单击其中一个输入字段时都会进行持续保存。你从 /posts/new 开始。一旦你写了一些东西并点击了输入,表单就会通过 ajax 提交。然后 /posts/new 的表单属性更改为 /post/1/edit 的表单属性(1 可以是任意数字)。并且,url 更新为 /post/1/edit(同样,1 可以是任何数字)。

当再次提交表单时,使用 /post/1/edit 和更新的表单属性,我收到以下错误:

No route matches [POST] "/posts/4"

在谷歌浏览器控制台中,我收到以下错误:

POST http://0.0.0.0:3000/posts/1 404 (Not Found)

这是我的代码。

/app/asset/javascripts/posts.js

$(document).ready(function() {
  $('.new_post').on('focusout', function(ev) {
    $('.new_post').submit();
  });

  $('.edit_post').on('focusout', function(ev) {
    $('.edit_post').submit();
  });
});

/app/controllers/post_controller.rb、/app/models/post.rb 和 /config/routes.rb 是从 post 的脚手架生成的控制器、模型和路由。

app/views/posts/_form.html.erb

<%= form_for(@post, :remote => true) do |f| %>
  <% if @post.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(@post.errors.count, "error") %> prohibited this post from being saved:</h2>

      <ul>
      <% @post.errors.full_messages.each do |msg| %>
        <li><%= msg %></li>
      <% end %>
      </ul>
    </div>
  <% end %>

  <div class="field">
    <%= f.label :title %><br />
    <%= f.text_field :title %>
  </div>
  <div class="field">
    <%= f.label :description %><br />
    <%= f.text_area :description %>
  </div>
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

另外,还有几件事。

1)如果我只是去/post/1/edit,进行编辑并点击输入字段;没有路由错误。

2) post/new 到表单动作的ajax更新后生成的html和post/1/edit页面生成的html是相同的。

任何帮助将不胜感激。

谢谢。

4

1 回答 1

1

您应该进行 PUT 更新,代码正在执行 POST 请求,因此除非您包含 _method: PUT 否则它不是可识别的路线。

于 2013-06-26T14:04:02.957 回答