2

我已经阅读了有关RoutingRestful ResourcesUrlHelper的 Rails 文档,但仍然不了解创建复杂/嵌套路由的最佳实践。我现在正在处理的示例是事件,它有_many rsvps。因此,用户正在查看事件列表,然后单击注册,然后完成注册过程等。我希望 url 看起来像这样:

/events
/events/123 # possible without title, like SO
/events/123/my-event-title # canonical version
/events/my-category/123/my-event-title # also possible like this
/events/123/my-event-title/registration/new
... and all the restful nested resouces.

问题是,我如何用最少的代码完成这个任务?

这是我目前拥有的:

map.resources :events do |event|
  event.resources :rsvps, :as => "registration"
end

这让我明白了:

/events/123/registration

完成其他 2 条路线的最佳方法是什么?

/events/123/my-event-title # canonical version
/events/my-category/123/my-event-title # also possible like this

事件my-category可以是 10 种可能类型的数组。

我已经修改Event#to_param为 return "#{self.id.to_s}-#{self.title.parameterize}",但我更愿意拥有/id/title整个规范性

4

2 回答 2

1

因为您描述的对 SEO 友好的 URL 不符合 Rails 生成 RESTful 路由的方式,所以您需要使用常规路由来设置它们。例如:

map.show_event 'events/:id/:event_title', :controller => 'events', :action => 'show'

不要觉得您必须对应用程序中的所有内容都使用自动生成的 RESTful 路由。它并不总是适合您尝试做的事情。甚至 Rails 路由指南也是这么说的:

虽然 RESTful 路由已成为 Rails 标准,但仍有很多地方可以使用更简单的常规路由。您甚至可以在一个应用程序中混合这两种样式。通常,您应该尽可能选择 RESTful 路由,因为它会使您的应用程序的某些部分更易于编写。但是,如果不合适的话,没有必要尝试将应用程序的每一个部分都硬塞到一个 RESTful 框架中。

于 2010-03-19T00:09:54.433 回答
-1

你看过 Rails路由指南吗?它有很多信息可以让您了解路由器,并包含有关嵌套资源的部分。

于 2010-03-18T23:57:19.077 回答