2013-09-21 59 views
0

據我所知,最好的做法是隻在URL中包含確定模型對象所需的參數。 如果我有2個模型,發佈和評論...一個帖子有很多評論和評論屬於一個職位。註釋行的URL可以Rails路由,深層嵌套的外部資源

/comment/:comment_id 

,並從社團我可以確定它張貼屬於但是 一些Rails應用需要訪問外部資源(通過API爲例)。如果rails應用程序需要複製另一個外部源的一部分,那麼處理URL和路由的正確方法是什麼? 例如,如果一個職位有一些評論,對評論的URL可以是

/post/:post_id/comment/:comment_id 

/comment/:comment_id 

後者有一個缺點是,我不能確定它張貼屬於如果外部來源的API不能確定這會導致通過應用程序導航時出現問題,但它是一個簡短的URL,並允許用戶輕鬆操縱URL來獲得另一個評論(我認爲這是一個優勢)。同時使用第一個(長)鏈接會使URL長這麼久,但我可以知道它屬於哪個帖子。

我能想到的唯一解決方案是使兩者都成爲可能,但用戶永遠不會知道如果我將長的默認值存在,那麼短的存在。你怎麼看?

回答

0

我自己總是使用較長/拼寫的版本。我不介意它很長,只有當你在這裏發現時才能看到好的東西。我也認爲這是一個優勢,因爲那麼你可以做這樣的事情:

post = Post.find_by_id(params[:post_id]) 
comment = post.comments.find_by_id(params[:id]) 

問題的關鍵是,你不能走「comment釣魚」這種方式。您必須擁有正確的post上下文才能獲得特定的comment。如果評論並不敏感,這可能無關緊要,但網絡應用程序中可能有很多東西。因此,通過根對象(如post)查找範圍可以快速進行權限檢查,可以重複使用,而無需檢查父對象。

無論如何,這是我的2美分。我從來都不明白爲什麼人們會爲更長的網站冒險。如果他們爲你工作,那麼不要害怕使用它們!