REST, Internet Explorer and the banned DELETE method

Hi all

As we all know, in REST the ResourceController#delete action is called
by calling "/resources/:id" with a delete method. But, the delete
method is not supported in IE. This seems like a problem to me. How do
people get around this, typically? I can think of various ways around
it but they all seem a bit bodgy and i'd like to know some other
approaches or even if there's something really obvious that i'm missing.

Hi,
You just cat you following in your view:
<%= link_to 'Destroy', photo, :confirm => 'Are you sure?', :method
=> :delete %>
and it appear in browser to that:
<a 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',
'LgNwcxaXQ3+NT95f1SJYo1ZOUfXMFtQimzSzDmjJM3g=');
f.appendChild(s);f.submit(); };return false;" href="/photos/
51">Destroy</a>

as you can see its still post, but it has hidden input that tells your
controller about delete.

*your just CAN ADD (sorry for this typo)....

by the way, the same story about PUT

<form method="post" id="edit_photo_51" class="edit_photo" action="/
photos/51">
      <div style="margin: 0pt; padding: 0pt; display: inline;">
          <input type="hidden" value="put" name="_method">
           <input type="hidden"
value="LgNwcxaXQ3+NT95f1SJYo1ZOUfXMFtQimzSzDmjJM3g="
name="authenticity_token">
        </div>
..........
  <p>
    <input type="submit" value="Update" name="commit"
id="photo_submit">
  </p>
</form>

DmitryPush wrote:

Hi,
You just cat you following in your view:
<%= link_to 'Destroy', photo, :confirm => 'Are you sure?', :method
=> :delete %>
and it appear in browser to that:
<a 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',
'LgNwcxaXQ3+NT95f1SJYo1ZOUfXMFtQimzSzDmjJM3g=');
f.appendChild(s);f.submit(); };return false;" href="/photos/
51">Destroy</a>

as you can see its still post, but it has hidden input that tells your
controller about delete.

Ah yes, of course, i had the feeling that rails handled this with a bit
of subterfuge but couldn't remember quite how. I actually tried this
with a link_to_remote and the generated html was just a call to
jQuery.ajax with the delete method, just as i'd done it already, rather
than the code you posted up. I wonder if this is an issue with the
jrails plugin, which overrides the javascript generated by rails' remote
helpers.

I'm actually doing it in javascript (in a jQuery.ajax call) anyway, so
lets see if changing the method to post and adding "_method=delete" to
the data has the same effect...yes it does. Great, thanks Dmitry!