2011-10-10 168 views
0

我對如何設置RESTful rails應用程序感到困惑。我有一些模型 - 課程,學生,作業和StudentHandsInAssignment。在課程和學生之間存在多對多的關係,在課程和作業之間是多對多的關係,以及兩對一對多的學生和作業到StudentHandsInAssignment。Rails和REST混淆

現在我正在考慮控制器和路由。從我讀過的東西中,我想要成爲RESTful,這意味着要製作資源。然而,我不能完全弄清楚如何在rails提供的資源中獲得所有我想要的東西。

特別是,我想詳細瞭解課程中學生的所有成績。現在,我是否可以在控制器中使用簡單的「GET/courses /:id」路由和相應的方法,或者使用更類似「GET/courses /:id/view_complete_grade_summary」的內容。我想我想做一些類似於後者的事情,因爲我可能有多種不同的方式查看課程。人們如何處理這種情況並設置路線/控制器?

此外,我需要有一個表格才能在應用中輸入成績。這將創建StudentHandsInAssignment對象並將它們存儲在數據庫中。但是,當我使用「GET student_hands_in_assignments/new」來顯示錶單(並最終提交以調用「create」)時,我如何傳遞學生ID和作業ID?它應該是這樣的:

「GET student_hands_in_assignments /新/:student_id數據/:assignment_id」

或像這樣:

「?GET student_hands_in_assignments /新/ student_id數據= 1 & assignment_id = 2」

我想我很困惑如何獲得關於學生和分配到一個RESTful URL所需的信息。處理這些情況的最佳方法是什麼?

+1

StudentHandsInAssignment?如何...等級? –

+0

哈哈...是的,這可能是一個更好的名字。 –

回答

1

沒有一個「正確」的方式來組織資源,海事組織。我的第一個想法是以學生爲中心:student /:student_id/course /:course_id/grade,但它可以很容易以課程爲中心,或兩者兼而有之。

雖然我沒有單獨的頁面來輸入成績,但是有些東西掛在學生頁面上(頁面上以Ajax爲中心的入門課程列表)關閉課程頁面(列表的同一年級入學計劃的學生)。否則,應用程序轉換隻會增加認知開銷而沒有任何好處。

對於像課程成績總結這樣的內容,我只需要/ course /:course_id/grade_summary或​​任何必需的東西。

0

儘管我發現創建漂亮的URL有助於我組織資源,但在維護我的代碼的同時仍然保持其理智,對於REST風格的應用程序使用'漂亮'的URL不是必需的。

我會考慮使用該網址與你所描述的情景:

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

添加類似以下內容到你的路線。RB:

resources :students do 
    resources :assignments 
end 

它將調用:

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

與參數:

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

作爲一個側面說明,考慮改變你的模型 'StudentHandsInAssignment' 的名義到別的東西。交付作業的學生既不是模型也不是控制器,它是對資源的操作。讓AssignmentController具有更新Assignment模型的動作「hand_in」可能更有意義(推測是使用狀態)。

希望這會有所幫助。

+0

StudentHandsInAssignment是我的應用程序中的一個模型。它加入了一個學生和一個作業。作業包含名稱,說明,截止日期。 StudentHandsInAssignment爲一個作業記錄一個學生的成績。我的問題之一是如何處理這些連接模型的路由/控制器? –

+0

@MarkM模型幾乎總是一個名詞,而不是一個動詞。動詞詞組?作爲一個模型,國際海事組織,這個名稱是沒有任何意義的,處理任務是一項引用資源的行動。交付任務實際上是一個學生在給定課程中的任務的狀態轉換。等級是分配屬性或單獨的模型,只能應用於處於交付/提交狀態的分配。 –