Как отправить запрос с HTTP-глаголом «УДАЛИТЬ»? - PullRequest
5 голосов
/ 07 февраля 2009

Я хотел бы создать ссылку в представлении в приложении Rails, которое делает это ...

DELETE /sessions

Как бы я это сделал.

Добавлено усложнение:

Ресурс "сеанс" не имеет модели, поскольку он представляет сеанс входа пользователя в систему. CREATE означает, что пользователь входит в систему, DESTROY означает, что выходит из системы.

Вот почему в URI нет ID-параметра.

Я пытаюсь реализовать ссылку «Выйти» в пользовательском интерфейсе.

Ответы [ 4 ]

18 голосов
/ 07 февраля 2009

Правильно, браузеры фактически не поддерживают отправку запросов на удаление. Общепринятым соглашением многих веб-фреймворков является отправка параметра _method, установленного в «DELETE», и использование запроса POST.

Вот пример в Rails:

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

Возможно, вы захотите взглянуть на Restful Authentication .

4 голосов
/ 11 февраля 2009

Я не знаю конкретно о Rails, но я часто создаю веб-страницы, которые отправляют запросы DELETE (и PUT), используя Javascript. Я просто использую объекты XmlHttpRequest для отправки запроса.

Например, если вы используете jQuery:

есть ссылка, которая выглядит следующим образом:

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

И запустите этот Javascript:

$(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
    })
})

Я написал этот пример в основном из памяти, но я почти уверен, что он будет работать ...

1 голос
/ 24 марта 2015

Встроенный метод Rails для ссылок генерирует что-то вроде этого:

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

Если вы не хотите использовать встроенный метод Rails (то есть не хотите, чтобы rel="nofollow", который запрещает поисковым системам переходить по ссылке), вы также можете вручную написать ссылку и добавьте атрибут data-method, например:

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

Браузеры могут отправлять только запросы GET / POST, поэтому это отправит обычный запрос GET на ваш сервер Rails. Rails интерпретирует и направляет это как запрос DESTROY / DELETE и вызывает соответствующее действие.

1 голос
/ 07 февраля 2009

Поправьте меня, если я не прав, но я считаю, что вы можете отправлять POST и GET запросы только через браузер (в HTML).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...