Rails:覆盖RESTful路径?
问题描述:
是否可以重写一个RESTful路径?Rails:覆盖RESTful路径?
举例来说,我有photo_path(photo)
这将产生/photos/12345
,但我想为photo_path
所有使用实际生成的URL像/photos/joeschmoe/12345
(这是照片的用户和照片的身份证件)。
很明显,我可以创建一个新的路线,但要确保没有更多的REST风格的做法。
答
你可以让照片成为用户的一个子资源,所以你会有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