Rails 3路线:如何避免与'show'动作发生冲突?

Shp*_*ord 3 url routes ruby-on-rails-3

我目前有以下路线设置photos:

resources :photos
match 'photos/:user' => 'photos#user', :as => :user_photo
match 'photos/:user/:key' => 'photos#show', :as => :show_photo
Run Code Online (Sandbox Code Playgroud)

这两条match路线给我这样的网址:

http://example.com/photos/joe_schmoe
http://example.com/photos/joe_schmoe/123xyz
Run Code Online (Sandbox Code Playgroud)

...类似于Flickr格式化其URL的方式.

但是,我遇到的问题是photos/:user路由被解释为show方法,或者如果我将那些自定义路由放在当前路由之前,resources比如/newget解释为user方法.

如何在不必大量定制路线的情况下解决这个问题?

Rya*_*igg 8

你会希望把这个定义路由之上resources :users,所以它在路线第一个匹配.

match 'photos/:user' => 'photos#user', :as => :user_photo
resources :photos
Run Code Online (Sandbox Code Playgroud)

此外,您可以show完全禁用该操作:

resources :photos, :except => :show
Run Code Online (Sandbox Code Playgroud)