Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Ruby: Общие вопросы > Каким образом RoR изменяет HTTP заголовок? и др.


Автор: pupadupa 9.12.2008, 21:19
Добрый вечер.

Возник вопрос: Каким образом RoR изменяет HTTP заголовок?  ...и несколько других вопросов (см. ниже) 
Исходя из REST (http://www.taknado.com/2007/8/31/rest-on-rails) , то чтобы запустить Destroy клиент должен отправить ссылку на объект (ресурс) + DELETE (в HTTP заголовке).


Пример:

из файла index.html.erb 
Код

<% for moloko in @molokos %>
  <tr>
    <td><%=h moloko %></td>
    <td><%=h moloko.title %></td>
    <td><%= link_to 'Show', moloko %></td>
    <td><%= link_to 'Edit', edit_moloko_path(moloko) %></td>
    <td><%= link_to 'Destroy', moloko, :confirm => 'Are you sure?', :method => :delete %></td>
  </tr>
<% end %>
</table>

<br />

<%= link_to 'New moloko', new_moloko_path %>

сервер генерит для клиента HTML-код:
Код

<h1>Listing molokos</h1>
<table>
  <tr>
    <td>moloko123</td>
    <td>123</td>
    <td><a href="/molokos/4">Show</a></td>
    <td><a href="/molokos/4/edit">Edit</a></td>
    <td><a href="/molokos/4" onclick="if (confirm('Are you sure?')) { 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', 'd5985dabf272c2f2e75a4db8cd7e42a30f62ab07'); 
f.appendChild(s);f.submit(); };return false;">Destroy</a></td>

  </tr>
</table>

<br />

<a href="/molokos/new">New moloko</a>


</body>
</html>


Вопросы:
1) Непонятно где менятется HTTP заколовок например на delete ? в javascript коде не разобрался, самое похожее там это m.setAttribute('value', 'delete');    но что в этой строке делается - непонятно.
2) Edit делается просто по ссылке (/molokos/4/edit), а почему не сделать, чтобы и delete был по ссылке, по наналогии /molokos/4/delete ?  Я понимаю, что в этом подход REST, но не вижу необходимости так заморачиваться, возможно там есть скрытый/глубокий смысл в необходимость использовать изменение HTTP заголовка вместо  использования /molokos/4/delete 
3) Методы edit_moloko_path(moloko) и new_moloko_path понятны. Есть где-нить описания методов этих (и других им подобных) ? Откуда эти методы определяют путь, может в каком файле прописано ?

Спасибо.

З.Ы. Прошу прощения за вопросы глупые, но учить RoR начал недавно, а разобраться хочется детально. Надеюсь Ваши ответы также помогут в будущем новым новичкам smile

Автор: source777 10.12.2008, 13:38
Цитата(pupadupa @  9.12.2008,  21:19 Найти цитируемый пост)
возможно там есть скрытый/глубокий смысл в необходимость использовать изменение HTTP заголовка вместо  использования /molokos/4/delete 

Угу, этот скрытый смысл является одним из основных правил веб-программирования, которое обязан знать каждый веб-программист: метод GET применяется для запросов, не меняющих информацию на сервере,  и больше не для чего!!! 
http://www.w3.org/2001/tag/doc/whenToUseGet.html


Цитата(pupadupa @  9.12.2008,  21:19 Найти цитируемый пост)
Откуда эти методы определяют путь, может в каком файле прописано ?
В ./config/routes.rb это прописано.


Цитата(pupadupa @  9.12.2008,  21:19 Найти цитируемый пост)
Прошу прощения за вопросы глупые, но учить RoR начал недавно, а разобраться хочется детально.

Тут дело не в RoR, а в том, что ты не знаешь основ HTTP и REST, а без этой базы RoR начинать изучать не очень разумно...

Автор: pupadupa 10.12.2008, 16:44
Спасибо! 
Буду разбираться в дальше.

Вот ещё мне ответили в гугл группе "RubyOnRails to russian" (кому-нить ещё пригодится):


"...The PUT and DELETE methods are not always implemented by web
clients. And some firewalls block their use..."

"There is just one difference: because of the problems with HTTP's PUT
and DELETE methods (mentioned above), Rails permits these
communications to be transmitted using POST provided the data has a
field called _method that is set to either put or delete"

f.method = 'POST'; // ПОСТим
// создаем хайден вар _method и присваеваем ей значение нужного
хедера.
var m = document.createElement('input');
m.setAttribute('type', 'hidden');
m.setAttribute('name', '_method');
m.setAttribute('value', 'delete');

> 3) Методы edit_moloko_path(moloko) и new_moloko_path понятны. Есть где-

нить описания методов этих (и других им подобных) ? Откуда эти методы
определяют путь, может в каком файле прописано ?

rake routes 


еще. по 2-му пункту почитайте http://www.oucs.ox.ac.uk/rails/howtos/rest/handout.pdf

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)