Working through Agile Web Development with Rails – Part 4
Section 9 Playtime – Page 139
The last task is to add a link to each item and remove it from the cart. It is suggested that you do this in a non-Ajax way first and then add the Ajax and the example on http://wiki.pragprog.com/cgi-bin/wiki.cgi/PT-D-4 covers this in detail however I found the following problems.
Not working in JavaScript disabled browser
<td>
<%= link_to_remote “remove”, :url => { :action => :remove_from_cart , :id => cart_item.product} %>
</td>
This line renders the link as an onclick event which will not work if javascript is disabled. This may be a bug in my version of Ruby on Rails where the href=”#” should render the link if javascript is disabled.
<a href=”#” onclick=”new Ajax.Request(’/store/remove_from_cart/2′, {asynchronous:true, evalScripts:true}); return false;”>remove</a>
To resolve this issue I replaced this with
<% form_remote_tag :url => {:action => :remove_from_cart, :id => cart_item.product } do %>
<%= submit_tag “remove” %>
<% end %>
This produces a form similar to the ones used for the Index.rhtml
If using JavaScript the redirect_to_index will not work, this is because the form_remote_tag (or link_remote_tag) enable XHR request which will not force a redirect of the main browser. This should be written as form_tag (or link_tag) to work without Ajax and updated to use remote once the remove_from_cart.rjs has been created. Generally you will tend to write this in the finished format now that you know how the remote calls work.
