Nano Hash - криптовалюты, майнинг, программирование

Как использовать AJAX для удаления сообщения в приложении Sinatra Ruby?

Я пытаюсь использовать 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. Я надеюсь, что этой информации достаточно. Спасибо.

25.02.2017

Ответы:


1

Кажется, вы отправляете запрос HTTP POST, но Sinatra ожидает получить запрос DELETE. Два варианта:

Измените запрос Jquery ajax на:

    $.ajax({
      url: url,
      type: 'DELETE', // Change this
      data: data
    })

Или, если вы хотите сохранить существующий код Javascript, измените свое приложение Sinatra на:

post '/posts/:id' do  # Change delete to post
...

GET, POST, DELETE и PUT являются стандартными запросами Http, и вы можете использовать либо post, либо delete, чтобы получить желаемый результат.

25.02.2017
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..