2011-04-03 77 views
2

我有一個情況(對每個人我猜漂亮的標準),在那裏我必須做兩件事情:你如何處理當前用戶和用戶列表?

  1. 如果用戶請求/用戶路徑,我必須出示他/她的個人信息。

  2. 如果用戶要求/ user /:id路徑,我必須提供有關該特定用戶或當前用戶信息的信息,如果:id與current_user id匹配。

確實有很多方法可以做到這一點,但最好的方法是什麼?我應該有2個不同的路線,如/ show /:id和/ show_current,通過不同的操作處理,或者只有一個/ show /:id並執行該操作中的處理?

請記住,如果這是當前視圖,我需要呈現一個不同於另一個視圖更詳細的視圖。我認爲後者可能是更好的方法,但你認爲呢?

+0

/user路徑(第一個)更像編輯而不是show? – theIV 2011-04-03 01:54:48

+0

不是真正的編輯,更多的是查看頁面,但更詳細的版本。 – Spyros 2011-04-03 02:04:36

回答

2

如果當前用戶是42,那麼/user/42/user將顯示相同的信息,但/user/23將顯示23的數據的精簡版公共版本。因此,/user/:id的處理程序必須知道:id是當前用戶的特例; /user的處理程序也必須知道這個特殊情況,因爲它就是這樣。

如果您使用兩條路線,那麼您要麼複製代碼,要麼將實際代碼封裝在額外的層中,要麼執行其他一些繁忙的工作。我只希望他們都發送到同一個控制器方法,並藉助像這樣開始:

user = params['id'] ? User.find(params['id']) : current_user 

再後來就你處理的用戶的特殊情況,是當前用戶在一個地方用簡單的東西:

if(user == current_user) 
    # show the full blob of information 
else 
    # show just the limited public information 
end 

你可以,當然,切它成一堆的小方法,如show_current_user_infoshow_other_user_info,控制器內。 /user的處理程序可能只是致電show_current_user_info; /user/:id處理程序可能會調用show_current_user_infoshow_other_user_info,具體取決於:id是什麼。這種方法聞起來像對我毫無意義的分層。

+0

是的,這似乎是對我來說也是最好的方式。單一路線。感謝名單。 – Spyros 2011-04-03 02:49:26

1

在RESTful路由中,您描述了users_pathuser_path(some_id)。這些映射到User#indexUser#showindex方法通常是一個用戶列表,但如果您想要index顯示current_user個人信息,您當然可以做到這一點。如果您還需要列表方法,只需將其添加到您的控制器並創建一個路徑。

+0

儘管如此,你認爲更好。處理這兩種情況(當前和其他用戶)或兩條單獨路線的單一路線? – Spyros 2011-04-03 02:29:35

+0

如果您的視圖對於「當前用戶」必須有所不同,那麼有兩個操作使每個視圖呈現不同的視圖是有意義的。類似[https://gist.github.com/fc0fbc198bd840ad1283](https://gist.github.com/fc0fbc198bd840ad1283)對我來說很有意義。 – 2011-04-03 02:43:01

相關問題