I tend to use has_many :through, but have you tried
student.classes.delete(science)
I think needing to have the target object, not just the ID, is a limitation of HABTM (since the join table is abstracted away for your convenience). If you use has_many :through you can operate directly on the join table (since you get a Model) and that lets you optimize this sort of thing into fewer queries.
def leave_class(class_id)
ClassMembership.delete(:all, :conditions => ["student_id = ? and class_id = ?", self.id, class_id)
end
If you want the simplicity of HABTM you need to use
student.classes.delete(Class.find 2)
Also, calling a model "Class" is a really bad idea. Use a name that isn't part of the core of Ruby!
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…