2010-09-08 64 views
2

我有2個模型 - 用戶和活動 - 它們與has_many相關:通過使用UserActivity模型。用戶可以「想要」或「完成」一個活動,這會創建一個UserActivity記錄並設置適當的布爾值。has_many的RESTful路由:通過關係?

當您創建路線和控制器操作時,您會如何處理這些操作?像activity /:id/want和activity /:id/done是最有意義的,因此在活動資源下有2個成員路由嗎?或者在user_activity控制器中使用更新/創建操作,發佈/ user_activity創建並更新/ user_activity /:id會更有意義嗎?

回答

0

我會採用後一種方法,即允許POST/PUT訪問「user_activity」。在REST世界中,儘管它只是形成「用戶」和「活動」資源之間的關係,但它被視爲新資源。

想到的一個想法是將「想要」或「已完成」的活動類型作爲新資源(例如「狀態」)分開。這個想法很乾淨,因爲它沒有它,但是如果有機會你不得不將這個列表擴展到「想要」或「完成」之上(例如「某天/可能」),那麼可能會更容易將其定義爲新資源而不是後來。

所以你會:

  • 用戶資源:/user/user/id
  • 活動資源:/activity/activity/id
  • 狀態的資源:形成用戶之間的關係/status/status/id
  • 資源,活動和資源:/user-activity/user-activity/id

根據您的URI的設計,那麼你可以在accessable的URI這將讓你得到一個用戶這是在特定狀態的所有活動,如工作:/user-activity/user/{userId}/status/{statusId}


請注意:我不能就Ruby-on-Rails的細節提供建議(因爲我來自PHP世界),但我認爲(REST)原則應該非常相似。