2010-10-28 84 views
2

是否可以重写一个RESTful路径?Rails:覆盖RESTful路径?

举例来说,我有photo_path(photo)这将产生/photos/12345

,但我想为photo_path所有使用实际生成的URL像/photos/joeschmoe/12345(这是照片的用户和照片的身份证件)。

很明显,我可以创建一个新的路线,但要确保没有更多的REST风格的做法。

回答

2

你可以让照片成为用户的一个子资源,所以你会有users/joeschmoe/photos/12345(当然,在这里,你的用户控制器需要接受用户名而不是id的能力,这是解决另一个路由问题,但不难)

resources :users do 
    resources :photos 
end 

然后控制器也许可以称之为

@photos = Photo.find_by_username(params[:id]) 

虽然我认为有这样做的少哈克的方式。

您还可以将joeschmoe作为查询字符串参数添加。

或者你可以使用户名在路由的可选参数,所以它会像

match "/photos(/:username)/:id" => "photos#show" 

或者,如果你想有一个新的命名路线:

match "/photos/:username/:id" => "photos#show_by_user", :as => :user_photo