смысл RESTful запросов - PullRequest
       3

смысл RESTful запросов

0 голосов
/ 24 августа 2010

У меня есть приложение ruby-on-rails, и теперь мне интересно, почему RoR использует Restful Requests: например.если вы хотите удалить ресурс, лучше всего сделать это с помощью HTTP-запроса:

DELETE /entry/13

, вы также можете сделать это с помощью обычного запроса: GET /entry/delete/13 или GET /entry/13/delete

Теперь мой вопрос: когда я делаю ссылку на такую ​​спокойную операцию удаления с помощью помощника link_to

link_to :controller =>:delete, :id => id, :method => :delete

, это приводит к некоторому загадочному javascript:

<a href="/entry/13" onclick="var f = document.createElement('form'); f.style.display = 'none'; this.parentNode.appendChild(f); f.method = 'POST'; f.action = this.href;var m = document.createElement('input'); m.setAttribute('type', 'hidden'); m.setAttribute('name', '_method'); m.setAttribute('value', 'delete'); f.appendChild(m);var s = document.createElement('input'); s.setAttribute('type', 'hidden'); s.setAttribute('name', 'authenticity_token'); s.setAttribute('value', 'GIep/wk5+6EMX23qY4TAP7joKy/G3f5uvMI6d6n9vlA='); f.appendChild(s);f.submit();return false;">Delete</a>

Так что жеидея за этим стоит?На мой взгляд, вы просто исключаете не-javascript пользователей.

1 Ответ

0 голосов
/ 24 августа 2010

Все версии Rails <3 используют очень навязчивый javascript (и результат, как вы продемонстрировали, довольно уродлив). </p>

Документ предполагает , что метод вернется к использованию GET, если JavaScript отключен:

: method => символ HTTP-глагола - Это Модификатор будет динамически создавать HTML-форму и немедленно отправьте форма для обработки с использованием HTTP указанный глагол. Полезно иметь ссылки выполняют операцию POST в опасные действия, такие как удаление запись (какие поисковые роботы могут следовать пока пауковал ваш сайт). поддержанный глаголы: post,: delete и: put. Обратите внимание, что если у пользователя есть JavaScript отключено, запрос будет отклонен использовать GET. Если вы полагаетесь на поведение POST, вы должны проверить для этого в действии вашего контроллера используя методы объекта запроса для пост ?, удалить? или поставить?.

В любом случае, я бы посоветовал вам создать ссылки "уничтожить" следующим образом:

# when you have an "entry" object
link_to "Destroy", entry, :method => :delete

# when you only have an "entry" object's id
link_to "Destroy", entry_path(:id => id), :method => :delete
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...