入力フィールドのいずれかをクリックするたびに継続的に保存する Rails アプリがあります。/posts/new から始めます。何かを書いて入力をクリックすると、フォームが ajax 経由で送信されます。/posts/new のフォーム属性は、/post/1/edit (1 は任意の数) のフォーム属性に変更されます。そして、URL は /post/1/edit に更新されます (ここでも、1 は任意の数字です)。
/post/1/edit および更新されたフォーム属性を使用してフォームを再度送信すると、次のエラーが発生します。
No route matches [POST] "/posts/4"
Google Chrome コンソールで、次のエラーが表示されます。
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 の scaffold から生成されたコントローラー、モデル、およびルートです。
アプリ/ビュー/投稿/_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) フォーム アクションへの posts/new の ajax 更新後に生成される html と、post/1/edit ページに対して生成される html は同一です。
どんな助けでも大歓迎です。
ありがとう。