我有一个用Rails 3.2.8编写的电子商务网站,该网站销售音乐活动门票。到目前为止,我一直在应用程序中使用简单的RESTful路由:
/ => default route: /events
/events
/events/1
/events/1/new
/events/2
...
以前所有的事件都发生在同一个地方,但是从现在开始会有两个地方,让我们说“Morumbi”和“Maracanã”。 Place 是应用程序中的模型,它是事件之间非常重要的区别。所以我想让地名成为路径的一部分,并且有这样的路线:
/ => default route: page to choose place
/morumbi => same as /morumbi/events
/morumbi/events/1
/morumbi/events/1/new
/maracana => same as /maracana/events
/maracana/events/2
...
虽然我知道如何使用#match
方法做到这一点,但我已经使用更易维护的#resources
方法创建了大量路由,并且我想保留它们。< / p>
您是否知道避免使用#match
的解决方案?
答案 0 :(得分:3)
您需要使用#scope
方法:
scope path: ':place_name', as: 'place' do
resources :events
...
end
因此GET /morumbi/events/1
会使用参数EventsController#show
和id: '1'
来调用place_name: 'morumbi'
。