has_many的RESTful路由:通过关系?

时间:2010-09-08 09:25:50

标签: ruby-on-rails rest has-many-through nested-routes

我有两个模型 - 用户和活动 - 通过使用UserActivity模型与has_many相关:用户可以“想要”或“完成”一个活动,这会创建一个UserActivity记录并设置适当的布尔值。

在创建路径和控制器操作时,您建议处理这些操作?像activity /:id / want和activity /:id / done这样的东西最有意义,因此在activity资源下有2条成员路由吗?或者在user_activity控制器中使用更新/创建操作更有意义,发布创建的/ user_activity,并将/ user_activity /:id更新?

1 个答案:

答案 0 :(得分:0)

我会采用后一种方法,即允许POST / PUT访问“user_activity”。在REST世界中,这被视为一种新资源,即使它只是形成“用户”和“活动”资源之间的关系。

我想到的一个想法是将“想要”或“完成”活动类型分离为新资源(例如“状态”)。这个想法是干净的,因为它甚至没有它,但是如果有可能你必须将列表扩展到“想要”或“完成”(例如“某天/可能”)之上的东西,它可能会更容易将其定义为新资源而不是现在。

所以你会:

  • 用户资源:/user/user/id
  • 活动资源:/activity/activity/id
  • 状态资源:/status/status/id
  • 形成用户,活动和资源之间关系的资源:/user-activity/user-activity/id

根据您的URI设计,您可以使用可访问的URI,这将允许您获取处于特定状态的用户的所有活动,例如:/user-activity/user/{userId}/status/{statusId}


请注意:我无法就Ruby-on-Rails的具体内容提出建议(因为我来自PHP世界),但我认为(REST)原则应该非常相似。