2009-02-07 28 views
5

tôi muốn tạo một liên kết trong một cái nhìn trong một ứng dụng Rails mà thực hiện điều này ...Bạn gửi yêu cầu bằng động từ HTTP "DELETE" như thế nào?

DELETE /sessions 

Làm thế nào tôi sẽ làm điều đó.

Đã thêm biến chứng:

Tài nguyên "phiên" không có mô hình vì nó đại diện cho phiên đăng nhập của người dùng. CREATE nghĩa là người dùng đăng nhập, DESTROY nghĩa là đăng xuất.

Đó là lý do tại sao không có thông số ID trong URI.

Tôi đang cố triển khai liên kết "đăng xuất" trong giao diện người dùng.

Trả lời

18

Chính xác, trình duyệt không thực sự hỗ trợ gửi yêu cầu xóa. Quy ước được chấp nhận của nhiều khung công tác web là gửi một tham số _method được đặt thành 'DELETE' và sử dụng yêu cầu POST.

Dưới đây là một ví dụ trong Rails:

<%= link_to 'log out', session_path, :method => :delete %> 

Bạn có thể muốn có một cái nhìn tại Restful Authentication.

1

Sửa lỗi nếu tôi sai, nhưng tôi tin rằng bạn chỉ có thể gửi yêu cầu POST và GET bằng trình duyệt (bằng HTML).

+1

Chính xác; tuy nhiên, bạn có thể gửi yêu cầu với các động từ tùy ý bằng JavaScript. –

+2

Ngoài ra Rails đề với nó khi không có Javascript bằng cách thêm một lĩnh vực đầu vào ẩn được gọi là _method và thiết lập nó thành PUT/POST/DELETE và sau đó giả vờ nó có loại phương thức HTTP đó. – Otto

4

Tôi không biết về Rails cụ thể, nhưng tôi thường xuyên xây dựng các trang web gửi các yêu cầu DELETE (và PUT) bằng Javascript. Tôi chỉ sử dụng các đối tượng XmlHttpRequest để gửi yêu cầu.

Ví dụ, nếu bạn sử dụng jQuery:

có một liên kết giống như thế này:

<a class="delete" href="/path/to/my/resource">delete</a> 

Và chạy javascript này:

$(function(){ 
    $('a.delete').click(function(){ 
     $.ajax(
      { 
       url: this.getAttribute('href'), 
       type: 'DELETE', 
       async: false, 
       complete: function(response, status) { 
        if (status == 'success') 
         alert('success!') 
        else 
         alert('Error: the service responded with: ' + response.status + '\n' + response.responseText) 
       } 
      } 
     ) 
     return false 
    }) 
}) 

tôi đã viết ví dụ này chủ yếu từ bộ nhớ , nhưng tôi chắc chắn nó sẽ hoạt động ....

1

Phương pháp dựng sẵn cho đường liên kết sẽ được tạo ra ví dụ như thế này:

<a href="/sessions?method=delete" rel="nofollow">Logout</a> 

Nếu bạn không muốn sử dụng phương pháp cài sẵn của Rails (tức là không muốn rel="nofollow", ngăn ngừa trình thu thập công cụ tìm kiếm từ theo liên kết), bạn cũng có thể tự viết vào liên kết và thêm thuộc tính data-method, như vậy:

<a href="/sessions" data-method="delete">Logout</a> 

trình duyệt chỉ có thể gửi GET/POST yêu cầu, do đó, điều này sẽ gửi một yêu cầu GET bình thường đến máy chủ Rails của bạn. Đường ray sẽ diễn giải và định tuyến này như một yêu cầu DESTROY/DELETE và gọi hành động thích hợp.

Các vấn đề liên quan