Я пытаюсь использовать AJAX для удаления сообщения в простом приложении Ruby на Sinatra.
Это мой маршрут удаления без каких-либо вызовов AJAX:
delete '/posts/:id' do
id = params[:id]
post = Post.find(id)
post.destroy
redirect '/posts'
end
Это то, что у меня есть в моем файле JS для удаления:
$('.post-container').on('submit', '.delete-form', function(event){
event.preventDefault();
var url = $(this).attr('action'),
data = $(this).serialize();
$.ajax({
url: url,
type: 'post',
data: data
})
.success(function(response){
$('.post-container').remove(response);
}.bind(this))
.fail(function(status, xhr, error){
})
})
Это мой index.erb
<header>
<h1>Hacker News</h1>
<p>
<a href="#posts">new</a>
<a href="#">comments</a>
<a href="#">popular</a>
<a href="#">login</a>
</p>
</header>
<div class='post-container'>
<% @posts.each do |post| %>
<%= erb :'_post' , locals: {post: post}%>
<% end %>
</div>
<form id="posts" method="post" action="/posts">
<input type="text" name="title" placeholder="title">
<input type="submit" value="submit new post">
</form>
И мой частичный, который содержит форму удаления:
<article id="<%= post.id %>">
<form method="post" action='/posts/<%= post.id %>/vote' class="inline">
<button type="submit" name="submit_param" value="submit_value" class="fa fa-sort-desc vote-button upvote-button"></button>
</form>
<h2><a href='/posts/<%= post.id %>'><%= post.title %></a></h2>
<p>
<span class='points'><%= post.points %></span>
<span class='username'><%= post.username %></span>
<span class='timestamp'><%= post.time_since_creation %></span>
<span class='comment-count'><%= post.comment_count %></span>
<!-- <a class="delete" href='/posts/<%= post.id %>'></a> -->
<form action='/posts/<%= post.id %>' method='post' class='delete-form'>
<input type="hidden" name="_method" value="delete">
<input type="submit" value="delete">
</form>
</p>
</article>
Я знаю, что должен позвонить .xhr? в маршруте, но я не уверен, где и что рендерить. Кроме того, как обойти скрытый метод ввода для удаления при использовании AJAX. Я надеюсь, что этой информации достаточно. Спасибо.