2010-10-28 113 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