Отправка запроса DELETE из Синатры - PullRequest
19 голосов
/ 02 марта 2011

Я пытаюсь разработать приложение RESTful Sinatra. Теперь я знаю, как ответить на запрос на удаление с помощью чего-то вроде

delete '/user/:id' do |id|
   #do something in the model
end

Меня интересует, как мне выполнить этот метод. У меня не может быть ссылки, которая выполняет УДАЛЕНИЕ вместо GET, могу я?

Единственное решение, которое я нашел до сих пор, это отправка запроса DELETE через jQuery: Как отправить запрос PUT / DELETE в jQuery?

Я пытался изучить различные проекты RESTful Sinatra на github, но мои знания Ruby, вероятно, ограничены, чтобы понять, как они это делают.

Ответы [ 5 ]

27 голосов
/ 02 марта 2011

Вставьте следующую строку в ваш код.

use Rack::MethodOverride

Это поможет вам интерпретировать методы записи с параметром "_method" со значением "delete", как указано. Тогда вы можете написать

delete '/user/:id' do |id|
15 голосов
/ 02 марта 2011

Я думаю, что это как в Rails. Вам необходимо определить параметры «_method» со значением «delete» и добавить их в форму.

Когда вы POST формируете данные параметры, вы делаете запрос DELETE в sinatra.

Как:

<form action="/search" method="post">
  <div style="margin:0;padding:0">
    <input name="_method" type="hidden" value="delete" />
  </div>
</form>

То же самое с методом PUT

5 голосов
/ 07 сентября 2011

Другой способ - использовать Curl:

curl -X DELETE http://host/user/1
0 голосов
/ 28 ноября 2012

см. Также Вызовите Sinatra delete route с помощью jQuery , чтобы узнать, как это сделать с помощью jQuery и JSON на переднем конце и Sinatra на заднем.

0 голосов
/ 28 мая 2012
  %form{:action => "/note/delete/#{@note.id}", :method => "post"}
    %input{:type => 'submit', :name=> "_method", :value => 'delete', :class => 'button'}

Вы также можете запустить удаление маршрута с помощью кнопки, например, так:

...