404 only when link_to_remote but not when using link_to

I started using Ruby on Rails today and love it.
The one thing I haven’t been able to answer by myself is why the first
link below works and the second doesn’t:
<%= link_to “Test Regular”, { :action => “show”, :id => “1” } %>
<%= link_to_remote “Test Ajax”, :update => “listing”, :url =>
{ :action => “show”, :id => “1”} %>

I am trying to load the html at http://localhost:3000/listings/1 into
a div on my page with the id listing. That URL works when accessed
directly or via link_to. However, when I click on the “Test Ajax”
link then the following text loads in my listing div: “Unknown action:
No action responded to 1”. What really puzzles me is that I even see
in FireBug that the when I click on the “Test Ajax” link that a
request is issued to the correct URL: http://localhost:3000/listings/1

The source generated by Rails is:
<a href="#" onclick="new Ajax.Updater(‘listing’, ‘/listings/1’,
{asynchronous:true, evalScripts:true, parameters:‘authenticity_token=’

  • encodeURIComponent(‘fda1badbcc7be1ff0d55829e684ecbe00579a97b’)});
    return false;">Test Ajax
    Test Regular

Hey there,

I’m assuming you’re using the basic scaffold code, which uses RESTful
routing, or are making an app with RESTful routes.

Without arguments, the AJAX call you are firing is sending a POST
request to the server to the URL /listings/1. As there is no RESTful
action/id which will respond to a POST of listings/1, your URL is
falling through the map.resources RESTful routing, and is ending up
caught by the default non-REST routes at the bottom of routes.rb which
is correctly(?) interpreting your /listings/1 as :controller =>
‘listings’, :action > ‘1’.

The secret to getting this to work is to include :method => :get in
your list of arguments to link_to_remote. That will send the AJAX
request as a GET, and allow the URL to be caught by the RESTful
map.resources method.

Incidentally, this stands for periodically_call_remote as it uses the
same syntax.

Hope this helps,

Simon Tokumine

Ah, right because a POST will be meant for creates. That makes sense
now. I hadn’t considered the link_to_remote request would be a POST
nor that a POST would cause problems.
Thanks so much for helping us noobs out Simon.

-Ben
benmccann.com

No worries Ben - This one bit me too :slight_smile:

FYI, you can check out what sets of HTTP verbs and URL input will
trigger what controller/action by running ‘rake routes’ in your rails
app directory. If you get more routing ‘huh?!’ moments (and a
supposedly RESTful route falling through to the default non-REST
routes is a good example), then compare the output from rake routes to
what your development.log is telling you your browser is submitting.
You’ll usually find the culprit there.

All the best,

Simon

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs