Я обновляю свое приложение Ruby on Rails с Rails 2.3.11 до 3.1.1.После обновления моего файла маршрутов новым синтаксисом я вижу изменение в поведении метода link_to
при передаче объекта ActiveRecord в качестве места назначения ссылки.
Вот пример старого (неRESTful) route от моего 2.3-файла route.rb приложения:
map.with_options :controller => 'widget' do |widget|
widget.widget 'widget/show/:id', :action => 'show'
end
Вот как этот маршрут стал в моем файле 3.1:
scope "widget", :controller => :widget do
match "show/:id", :action => "show", :as => :widget
end
end
Вывод rake routes
аналогичен.2.3:
widget /widget/show(/:id) {:controller=>"widget", :action=>"show"}
3.1:
widget /widget/show/:id(.:format) {:action=>"show", :controller=>"widget"}
Разница в том, что теперь мои вызовы link_to выглядят так:
link_to("Text", @widget_object)
Создать это сообщение об ошибке:
Routing Error: No route matches { :controller=>"widget", :action=>"show", :id=>#<Widget id: 123, .....> }
После просмотра этого отрывка в Направляющие рельсов :
<% = link_to "Сведения о журнале", @magazine%> ... Это позволяет вам рассматривать экземпляры ваших моделей как URL-адреса и является ключевым преимуществом использования изобретательного стиля. "
я предполагаю, что Rails 2.3 успешно обработал мои link_to
s, потому что мой маршрут назывался "widget" (изменение имени привело бы к разрыву link_to
s моего приложения 2.3), но Rails 3 настаивает наRESTful / ресурсные маршруты, если вы собираетесь использовать этот стиль link_to
.
Это верно? Я начал рефакторинг и добавляю необходимые маршруты RESTful, чтобы мои link_to
снова работали - с хорошимрезультаты - но я хочу подтвердить, что я действительно понимаю проблему. Я открыл ветку на rubyonrails-talk list , но еще не получил ответов.