2011-10-10 4 views
0

RESTful 레일 앱을 설정하는 방법에 대해 혼란스러워합니다. 코스, 학생, 과제, 학생 핸드 인 할당과 같은 모델이 있습니다. 코스와 학생 간에는 많은 관계가 있고, 코스와 과제 사이에는 많은 관계가 있으며, 학생과 과제에서 StudentHandsInAssignment까지는 2 대 1의 관계가 있습니다.레일 및 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

리소스를 구성하는 "올바른"방법은 없습니다. 채점을위한 나의 첫 번째 생각은 학생 중심적 일 것입니다 : student/: student_id/course/: course_id/grade, 그러나 쉽게 과정 중심 일 수 있습니다.

학생 페이지 (Ajax 중심의 성적 입력을 가진 등록 된 코스 목록) 대신 학생 페이지에 매달려있는 별도의 페이지가 없습니다. 코스 페이지 (목록 같은 학년 입학 계획을 가진 학생들). 그렇지 않으면 어떤 이점도없이인지 오버 헤드를 추가하는 앱 전환이 있습니다.

코스 등급 요약과 같은 경우에는/course/: course_id/grade_summary 또는 필요한 항목 만 있으면됩니다.

0

예쁜 URL을 만드는 것이 내 리소스를 정리하는 데 도움이되는 것을 알았지 만, '예쁜'URL을 사용하면 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는 한 과제에 대해 한 학생의 성적을 기록합니다. 내 질문 중 하나는 이러한 조인 모델에 대한 경로/컨트롤러를 다루는 방법입니다. –

+0

@MarkM 모델은 거의 항상 동사가 아닌 명사입니다. 동사구? 모델로서, IMO는 이름이 의미가 없습니다. 할당을 건네주는 것은 리소스를 참조하는 동작입니다. 과제물을 건네 주면 실제로 주어진 과목에 대한 학생의 과제가 국가로 전환됩니다. 등급은 양수 속성이거나 제출 된 주에있는 과제에만 적용 할 수있는 별도의 모델입니다. –