我已阅读了Routing,Restful Resources和UrlHelper的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
使用整个规范
答案 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上添加了一节。