【问题标题】:Rails and REST confusionRails 和 REST 混淆
【发布时间】:2011-12-04 04:28:28
【问题描述】:

我对如何设置 RESTful rails 应用程序感到困惑。我有一些模型——课程、学生、作业和 StudentHandsInAssignment。课程和学生之间存在多对多关系,课程和作业之间存在一对多关系,学生和作业与 StudentHandsInAssignment 之间存在一对多关系。

现在我正在考虑控制器和路由。从我读过的内容来看,我想成为 RESTful,这意味着制作资源。但是,我不太清楚如何在 rails 提供的资源中获取我想要的所有东西。

特别是,我想详细了解课程中学生的所有成绩。现在,我是在控制器中使用简单的“GET /courses/:id”路由和相应的方法,还是使用更具体的东西,如“GET /courses/:id/view_complete_grade_summary”。我想我想做类似后者的事情,因为我可能有多种不同的方式来查看课程。如何处理这种情况并设置该路由/控制器?

另外,我需要有一个表格才能在应用程序中输入成绩。这将创建 StudentHandsInAssignment 对象并将它们存储在数据库中。但是,当我使用“GET student_hands_in_assignments/new”显示表单(并最终提交调用“create”)时,我如何传递学生 ID 和作业 ID?应该是这样的:

“获取 student_hands_in_assignments/new/:student_id/:assignment_id”

或者像这样:

“获取 student_hands_in_assignments/new/?student_id=1&assignment_id=2”

我想我对如何将有关学生和作业的所需信息获取到 RESTful url 感到困惑。处理这些情况的最佳方法是什么?

【问题讨论】:

  • StudentHandsInAssignment?怎么样……成绩?
  • 哈哈...是的,这可能是一个更好的名字。

标签: ruby-on-rails rest


【解决方案1】:

IMO,没有一种“正确”的方式来组织资源。我对评分的第一个想法是以学生为中心:student/:student_id/course/:course_id/grade,但也可以很容易地以课程为中心,或两者兼而有之。

不过,我不会有一个单独的页面来输入成绩,而是挂在学生页面上的东西(带有页面内、以 Ajax 为中心的成绩条目的已注册课程列表)课程页面(具有相同年级入学计划的学生列表)。否则,应用转换只会增加认知开销而没有任何好处。

对于课程成绩摘要之类的内容,我只需要 /course/:course_id/grade_summary 或任何必要的内容。

【讨论】:

    【解决方案2】:

    对于 RESTful 应用程序来说,使用“漂亮”的 URL 不是必需的,尽管我发现创建漂亮的 URL 可以帮助我组织我的资源,帮助其他人在维护我的代码的同时保持他们的理智。

    我会考虑在您描述的场景中使用此 URL:

    # Renders the form to be submitted
    /students/:student_id/assignments/:assignment_id  
    

    在你的 routes.rb 中添加如下内容:

    resources :students do
      resources :assignments
    end
    

    将调用:

    {controller => 'assignments', :action => 'show'}
    

    带参数:

    {id => ':assignment_id', student_id => ':student_id'}
    

    作为旁注,请考虑将模型名称“StudentHandsInAssignment”更改为其他名称。提交作业的学生既不是模型也不是控制器,它是对资源的操作。让 AssignmentController 具有更新 Assignment 模型(可能带有状态)的操作“hand_in”可能更有意义。

    希望这会有所帮助。

    【讨论】:

    • StudentHandsInAssignment 是我应用程序中的模型。它加入一个学生和一个作业。作业有名称、描述、截止日期。 StudentHandsInAssignment 记录一个学生对一项作业的成绩。我的问题之一是如何处理这些连接模型的路由/控制器?
    • @MarkM 模型几乎总是名词,而不是动词。动词词组?作为一个模型,IMO,这个名字没有意义,在分配中是一个引用资源的动作。交作业实际上是给定课程的学生作业的状态转换。成绩是作业属性或单独的模型,只能应用于处于上交/已提交状态的作业。
    猜你喜欢
    • 1970-01-01
    • 2014-11-21
    • 2011-06-01
    • 1970-01-01
    • 2014-06-12
    • 2014-10-06
    • 2017-10-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多