是否可以覆盖RESTful路径?
例如,我photo_path(photo)
会生成/photos/12345
但我希望photo_path
的所有用途实际生成类似/photos/joeschmoe/12345
的网址(这是照片的用户和照片ID)。
显然我可以创建一条新路线,但希望确保没有更多的REST方式来实现它。
答案 0 :(得分: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