2011-10-10 9 views
0

RESTfulなレールアプリの設定方法が混乱しています。私はコース、学生、課題、およびStudentHandsInAssignmentといういくつかのモデルを持っています。コースと学生の間には多対多の関係があり、コースと課題の間には1対1の関係があり、StudentHandsInAssignmentへの学生と課題から2対1の関係があります。RailsとRESTの混乱

今コントローラとルーティングについて考えています。私が読んだことから、リソースを作ることを意味するRESTfulになりたい。しかし、私はレールで提供されているリソースに必要なすべてのものを手に入れる方法を理解することはできません。

特に、私は、コースの学生のためのすべての成績の精巧なビューを持っています。さて、単純な "GET/courses /:id"ルートとそれに対応するメソッドをコントローラで使用するか、 "GET/courses /:id/view_complete_grade_summary"のようなより具体的なものを使用します。後者のようなことをしたいと思うのは、コースを見る方法が複数あるからです。どのようにこの状況を処理し、そのルート/コントローラを設定しますか?

また、私はアプリでグレードを入力するフォームが必要です。これにより、StudentHandsInAssignmentオブジェクトが作成され、データベースに格納されます。しかし、私が "GET student_hands_in_assignments/new"を使ってフォームを表示すると(そして最終的に "create"と呼ばれる)、生徒IDと割り当てIDをどうやって渡しますか?それはこのようなものでなければなりません:

"student_hands_in_assignments /新/ GET:STUDENT_ID /:assignment_idを"

またはこのような

"?GET student_hands_in_assignments /新/ STUDENT_ID = 1 & assignment_id = 2"

私は学生とRESTful URLへの割り当てに関する必要な情報を取得する方法について混乱していると思います。これらの状況を処理する最善の方法は何ですか?

+1

StudentHandsInAssignment?グレード? –

+0

ハハ...はい、それはおそらくより良い名前です。 –

答えて

1

リソースを整理する「正しい」方法はありません。 Gradingの最初の考えは、学生中心主義:student /:student_id/course /:course_id/gradeですが、それはコース中心の、あるいはその両方でも簡単にできます。

学生用ページ(Ajax中心の等級の入学欄を持つ登録済みのコースのリスト)の学生のページにぶら下がっているものがありますが、別のページはありませんコースページ同じ学年の入学スキームを持つ生徒の)。そうでなければ、何の利益もなくコグニティブオーバーヘッドを追加するだけのアプリの遷移があります。私は持っていると思いますもちろんグレードの概要/コースのようなものについては

/:Course_IDに/ grade_summaryまたは何が必要です。私はかなりのURLを作成すると、私のリソースを整理するのに役立ちますことを見つけても「かわいい」のURLを使用して

0

は、RESTfulなアプリケーションのために必要ではない私のコードを維持しながら、他のは自分の正気を維持するのに役立ちます。

私はあなたが記述のシナリオで、この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は、1件の課題に対して1つの生徒の成績を記録します。私の質問の1つは、これらの結合モデルのルート/コントローラをどう扱うかです。 –

+0

@MarkMモデルはほとんど常に名詞であり、動詞ではありません。動詞句?モデルとして、IMO、名前は意味をなさない - 割り当てを渡すことは、リソースを参照するアクションです。課題を渡すことは、実際には、与えられたコースに対する学生の課題の状態遷移です。グレードは、割り当てられたプロパティまたは別のモデルのいずれかで、受入/送信された状態の割り当てにのみ適用されます。 –