RESTful routing in 2.3 breaks

Dear all,

After the release of 2.3 I immediately updated my app. However routing
does no longer seem to work for me. I have no idea how this can happen
but as soon as I POST to, for example, the forums_path, the request
gets routed to ForumsController#index instead of
ForumsController#create. The same happens with nested resources. Eg
POST to forums/1/topics leads to a POST in the ForumsController#1 with
params "id" => "topics"

I'm using these plugins which might mess up the routing:
acts_as_list
ar_fixtures
attachment_fu_hacks
mimetype-fu
restful_authentication
smurf
acts_as_tree
attachment_fu
hoptoad_notifier
newrelic_rpm
role_requirement

Any help would be great.

Harm

Hi, there’s no certainty that plugins are compatible from release to release. If the plugin author hasn’t upgraded the plugin for a release, then you have two choices:

a) wait for the author to update the plugin

b) fix it yourself

From the list that appears above, do you know for certain which plugin is causing the problem?

-Conrad

I don't think the problem is in the plugins. The only one involved in
routing is the new_relic plugin and removing that one is not helping.
I was just providing this information as a possible inroad.
So far I tried the following:
- My environments.rb file is basically the same as the one in a new
project.
- My routes.rb file is being read properly.
- 'rake routes' returns the usual set of routes.
- Running the server with webrick iso mongrel does not help.

Any other hints?

Harm

I don’t think the problem is in the plugins. The only one involved in

routing is the new_relic plugin and removing that one is not helping.

I was just providing this information as a possible inroad.

So far I tried the following:

  • My environments.rb file is basically the same as the one in a new

project.

  • My routes.rb file is being read properly.

  • ‘rake routes’ returns the usual set of routes.

  • Running the server with webrick iso mongrel does not help.

Any other hints?

Harm

Dear all,

After the release of 2.3 I immediately updated my app. However routing

does no longer seem to work for me. I have no idea how this can happen

but as soon as I POST to, for example, the forums_path, the request

gets routed to ForumsController#index instead of

ForumsController#create. The same happens with nested resources. Eg

POST to forums/1/topics leads to a POST in the ForumsController#1 with

params “id” => “topics”

I’m using these plugins which might mess up the routing:

acts_as_list

ar_fixtures

attachment_fu_hacks

mimetype-fu

restful_authentication

smurf

acts_as_tree

attachment_fu

hoptoad_notifier

newrelic_rpm

role_requirement

Any help would be great.

Harm

Hi, there’s no certainty that plugins are compatible from release to

release. If the plugin author hasn’t upgraded the plugin for a release,

then you have two choices:

a) wait for the author to update the plugin

b) fix it yourself

From the list that appears above, do you know for certain which plugin is

causing the problem?

-Conrad

Hi, did you update your Rails configurations by executing the following:

rake rails:update

-Conrad

I also found, that :_method => :get in link_to_remote doesn't work
anymore. That is, rails 2.3.2 doesn't treat it as GET request, but as
POST. so REST route doesn't work

Isn't _method only there for those methods that browsers won't use (eg
DELETE). You should be able to make link_to_remote do an actual get
rather than a fake one.

Fred

I did. :S
Even GET requests go wrong. In the routes.rb:
  map.resources :forums, :has_many => [:topics]
And doing a GET on (the existing) forums/1/topics gets routed to:
  Processing ForumsController#1 (for 127.0.0.1 at 2009-03-17 10:10:29)
[GET]
    Parameters: {"id"=>"topics"}

This is very strange.

My initial hunch was correct, thank you Conrad for you pointy question
on which plugin might be the culprit. The plugin 'smurf' inserted some
evil map.connects. Totally fixed it now!

Isn't _method only there for those methods that browsers won't use (eg
DELETE). You should be able to make link_to_remote do an actual get
rather than a fake one.

the question is - why rails 2.2.2 generates right JS cod for Ajax GET
request, but 2.3.2 isn't. It doesn't matter wich exactly method I
write. 2.2.2. generate correct JS code like

new Ajax.Request('/items', {asynchronous:true, evalScripts:true,
method:'get', ...

whereas 2.3.2 does this one

new Ajax.Request('/items/36497?_method=get...

see the difference?

found. now I have to write '_method' instead of :_method
thanks to all

no, sorry. it still doesn't work

I am seeing this as well. Only causes problems with xml and xhr
requests. Passing the _method=put on a http request works as expected.
See this ticket for how you can verify the problem. I haven't come up
with a solution yet.

http://rails.lighthouseapp.com/projects/8994/tickets/2289-_methodput-ignored-for-xhr-and-xml-requests

the solutions is that now we have to set :method => :get in options,
but not in :url hash. then it works