2010-09-08 81 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)原则应该非常相似。