William
2011-Nov-17 21:22 UTC
2.3 to 3.1 upgrade: RESTful routes now required when using link_to("foo", @object) ?
I''m upgrading my application from Rails 2.3.11 to 3.1.1. After
updating my routes file with the new syntax, I''m seeing a change in
behavior of the link_to method when passing an ActiveRecord object as
the link destination.
Here is an example of an old (non-RESTful) route from my 2.3
application''s routes.rb:
~~~~~~~
map.with_options :controller => ''widget'' do |widget|
widget.widget ''widget/show/:id'', :action =>
''show''
end
~~~~~~~
Here is what this route became in my 3.1 file:
~~~~~~~
controller :widget do
scope "widget" do
match "show/:id", :action => "show", :as =>
:widget
end
end
~~~~~~~
The output of `rake routes` is similar. 2.3:
widget /widget/show(/:id)
{:controller=>"widget", :action=>"show"}
3.1:
widget /widget/show/:id(.:format)
{:action=>"show", :controller=>"widget"}
What''s different is that now my link_to calls that look like this:
link_to("Text", @widget_object)
Produce this error message:
"Routing Error: No route matches
{ :controller=>"widget", :action=>"show",
:id=>#<Widget id:
123, .....> }"
After seeing this passage in the Rails Guides:
"<%= link_to "Magazine details", @magazine %>...This allows
you to
treat instances of your models as URLs, and is a key advantage to
using the resourceful style."
--http://guides.rubyonrails.org/routing.html#creating-paths-and-urls-
from-objects
my guess is that Rails 2.3 happily handled my link_tos because my
named route was widget_path/widget_url (changing the name would cause
my 2.3 app''s link_tos to break as well), but Rails 3 insists on
RESTful/resourceful routes if you''re going to use this link_to style.
Is that right? I''ve started refactoring and adding the necessary
RESTful routes to make my link_tos work again — with good results —
but I want to confirm that I really understand the problem.
William
--
You received this message because you are subscribed to the Google Groups
"Ruby on Rails: Talk" group.
To post to this group, send email to
rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org
To unsubscribe from this group, send email to
rubyonrails-talk+unsubscribe@googlegroups.com.
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en.