我有一个 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是相同的。
任何帮助将不胜感激。
谢谢。