2011-02-12 7 views
1

3 테이블 : Student, SubjectScore입니다.
모든 학생은 3 개의 과목 (물리, 수학 및 화학) 표시를 추가 할 수 있습니다.
(student_id + subject_id)의 조합이 Score 테이블에 추가됩니다. 즉, 그 sudent 캡처 '1'실제 점수 '수학'마크 (예를 들어 0-100 범위)를 첨가했다Ruby on Rail - Dymanic 드롭 다운 페치 및 표시 형식

student id : subjectid  Score 
    1   Mathematics 95 

ScoreAdd 페이지는 "제목"가 드롭 다운. "subject"테이블에서 표시됩니다.

학생이 두 번째 주제 표시를 추가하려는 경우 추가 페이지에서 드롭 다운에 추가 된 주제가 표시되지 않아야합니다.

아무에게도 어떻게 할 수 있습니까?

답변

0

예, 다음과 같은 방법으로 그것을 할 수 있습니다 (3.0 레일) :

class Subject 
    scope :not_enrolled_in, lambda{ |user| where("NOT EXISTS(SELECT id FROM scores WHERE user_id = ? AND subject_id = subjects.id)", user.id) } 
end 

또는 레일 2.x는이 방법 : 당신은 다음 주제의 목록을 얻을 수

class Subject 
    named_scope :not_enrolled_in, lambda{ |user| { :conditions => ["NOT EXISTS(SELECT id FROM scores WHERE user_id = ? AND subject_id = subjects.id)", user.id] } } 
end 

현재 사용자가 다음과 같이 등록하지 않았습니다.

Subject.not_enrolled_in(current_user).all 

그러면이 목록을 선택한 HTML 코드에서 사용할 수 있습니다.

+0

죄송합니다. 필자는이 파일을 새로 추가해야 할 때 어떤 파일에 추가해야하는지 언급하면 ​​멋질 것입니다. – Ruby

+0

범위 - Rails 3을 사용하는 첫 번째 예제와 Rails 2를 사용하는 경우 두 번째 예제는 app/models/subject.rb 모델 정의 파일 내에 있어야합니다. 마지막 라인은 사용자가 결정합니다. 결과를 표시 할 컨트롤러와보기에 따라 다릅니다. –

관련 문제