2013-06-26 2 views
0

У меня есть приложение для рельсов, которое постоянно сохраняет каждый раз, когда вы выходите из одного из полей ввода. Вы начинаете с/posts/new. После того, как вы что-то напишете и нажмите на вход, форма отправляется через ajax. Атрибуты формы/posts/new затем изменяются на атрибуты формы/post/1/edit (1 может быть любым числом). И, url обновляется до/post/1/edit (опять же, 1 может быть любым числом).rails ajax form action перезаписать ошибку маршрута

Когда форма передается снова, с/пост/1/редактировать и обновленные атрибуты формы, я получаю следующее сообщение об ошибке:

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

В хромированной консоли Google, я получаю следующее сообщение об ошибке:

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 являются контроллер, модель и маршруты, создаваемые с эстакады почты.

приложение/просмотров/сообщений/_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) Сгенерированный html после обновления ajax сообщений/новых действий формы и сгенерированного html для страницы post/1/edit идентичны.

Любая помощь была бы принята с благодарностью.

Спасибо.

ответ

1

Вы должны сделать PUT для обновления, код выполняет запрос POST, поэтому, если вы не включили _method: PUT, то это не признанный маршрут.

+0

Я думал, что пробовал это решение, но я должен был его реализовать неправильно, потому что при смене метода «положить» это сработало. Спасибо! – user2517182