如何在Rails中自定义RESTful路由(基础知识)

时间:2010-03-18 22:49:55

标签: ruby-on-rails rest routes nested-routes

我已阅读了RoutingRestful ResourcesUrlHelper的Rails文档,但仍然不了解创建复杂/嵌套路由的最佳做法。我现在正在研究的例子是事件,其中包含了很多rsvps。因此,用户正在浏览事件列表,点击注册,并完成注册过程等。我希望网址看起来像这样:

/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以返回"#{self.id.to_s}-#{self.title.parameterize}",但我更愿意/id/title使用整个规范

2 个答案:

答案 0 :(得分:1)

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

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

不要觉得必须将自动生成的RESTful路由用于应用程序中的所有内容。它并不总是适合你想要做的事情。甚至Rails路由指南都这样说:

  

虽然RESTful路由已经成为了   Rails标准,还有很多   更简单的地方   路由工作正常。你甚至可以混合   这两种风格在一个单一的   应用。一般来说,你应该   在可能的情况下更喜欢RESTful路由   因为它会成为你的一部分   应用程序更容易编写。但   没有必要尝试鞋拔   每个应用程序的最后一部分   进入RESTful框架,如果不是   很合适。

答案 1 :(得分:-1)

你看过Rails routing guide了吗?它有很多信息可以帮助您了解路由器,并在nested resources上添加了一节。