如何在不删除项目本身的情况下删除与HABTM相关的项目?
例如,假设我有三个学生一起上科学课.如何在不删除实际科学参考的情况下从StudentsClasses表中删除科学对象?我猜Student.Classes.first.delete
不是个好主意.
我使用带有拖放功能的JavaScript来添加和删除,而不是复选框.有什么 idea 吗?
如何在不删除项目本身的情况下删除与HABTM相关的项目?
例如,假设我有三个学生一起上科学课.如何在不删除实际科学参考的情况下从StudentsClasses表中删除科学对象?我猜Student.Classes.first.delete
不是个好主意.
我使用带有拖放功能的JavaScript来添加和删除,而不是复选框.有什么 idea 吗?
我倾向于使用has_很多:通过,但你试过了吗
student.classes.delete(science)
我认为需要有目标对象,而不仅仅是ID,是HABTM的一个限制(因为为了方便起见,连接表被抽象了).如果使用has_many:through,则可以直接对联接表进行操作(因为您得到了一个模型),这样就可以将这类操作优化为更少的查询.
def leave_class(class_id)
ClassMembership.delete(:all, :conditions => ["student_id = ? and class_id = ?", self.id, class_id)
end
如果你想要HABTM的简单性,你需要使用
student.classes.delete(Class.find 2)
此外,将模型称为"类"是一个非常糟糕的主意.使用一个不属于Ruby核心的名称!