2009-07-07 2 views
39

항목 자체를 삭제하지 않고 HABTM 관련 항목을 어떻게 제거합니까?항목 자체를 삭제하지 않고 하나의 HABTM 관련 항목을 어떻게 제거합니까?

예를 들어 과학 수업에 함께있는 학생이 3 명 있다고 가정 해보십시오. 실제 Science 참조를 삭제하지 않고 StudentsClasses 테이블에서 Science 개체를 제거하려면 어떻게합니까? 내가 그 Student.Classes.first.delete 좋은 생각이 아닌 것 같아요.

나는 드래그 앤 드롭 방식의 JavaScript를 사용하여 추가 및 제거하고 체크 박스는 사용하지 않습니다. 이견있는 사람?

답변

57

내가 has_many 사용하는 경향이 : 조인 테이블 멀리 추상화되기 때문에를 통해,하지만 당신은

student.classes.delete(science) 

내가 대상 개체 만이 아니라 ID가 필요 생각을 시도했다 HABTM의 제한 (이다 귀하의 편의를 위해). has_many : through를 사용하면 Join 테이블에서 직접 작업 할 수 있으며 (모델을 얻었으므로)이 유형의 쿼리를 더 적은 쿼리로 최적화 할 수 있습니다. 당신이 HABTM의 단순성을 원하는 경우에

def leave_class(class_id) 
    ClassMembership.delete(:all, :conditions => ["student_id = ? and class_id = ?", self.id, class_id) 
end 

당신은 모델 "클래스"정말 나쁜 생각 호출, 또한

student.classes.delete(Class.find 2) 

를 사용해야합니다. Ruby의 핵심이 아닌 이름을 사용하십시오! 당신은 당신이 *을 사용하고 쓸 수있는 여러 관련 항목을 삭제하려면

+0

그럼 방법은 그것이 현재 설정을 [: CLASS_ID] Class.find_by_id는 다음을 사용하여 수행 할 수 그것을 할 클래스를 찾았습니다. "Student.class_ids.remove [2]"라고 말할 수 있다면 좋을 것입니다. –

+0

그게 일종의 has_many : through를 필요로한다고 생각합니다. 이를 반영하도록 답변을 업데이트했습니다. –

0

: 나는 PARAMS를 사용해야합니다

student.classes.delete(*classes_array) 
관련 문제