2011-03-02 4 views
18

RESTful Sinatra 응용 프로그램을 개발하려고합니다. 이제는 삭제 요청에 대해 다음과 같이 응답하는 방법을 알고 있습니다.Sinatra에서 DELETE 요청 보내기

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

관심있는 내용은 해당 메소드를 어떻게 실행해야하는지입니다. 나는 GET 대신 DELETE를하는 링크를 가질 수 없다.

지금까지 jQuery를 통해 삭제 요청을 보내는 발견 유일한 해결책 : How to send a PUT/DELETE request in jQuery?

내가 GitHub의에 다른 편안하고시나 프로젝트로보고 시도했지만 내 루비 지식들이 그 일을하는 방법을 얻을 수 제한에 아마.

답변

24

넣어 PUT 방식과 동일합니다.

use Rack::MethodOverride 

그것은 당신이 말했듯이 값 "delete"와 "_method"매개 변수와 사후 방법을 해석하는 데 도움이됩니다. 또한 삭제 경로를 트리거 할 수 있습니다

curl -X DELETE http://host/user/1 
+5

사실 모듈러 앱을 사용하는 경우이 작업이 필요합니다. Sinatra Classy 앱은 기본적으로이 세트를 가져옵니다. – include

+1

Sinatra 모듈 스타일의 경우 "use Rack :: MethodOverride"대신 Sinatra :: Base에서 상속받은 앱 클래스에 추가 할 수 있습니다. "set : method_override, true" –

14

나는 Rails 방식과 같다고 생각합니다. params '_method'를 'delete'값으로 정의하고 양식에 추가해야합니다.

이 특정 params로 POST를 작성하면 sinatra에서 DELETE 요청을합니다.

등 :

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

그것은 당신의 코드 행 다음에

5

쓸 수 있습니다 이를 프론트 엔드의 jQuery와 JSON 및 백엔드의 Sinatra로 수행합니다.

0
%form{:action => "/note/delete/#{@note.id}", :method => "post"} 
    %input{:type => 'submit', :name=> "_method", :value => 'delete', :class => 'button'} 

버튼이 너무