2009-07-07 77 views
39

如何在不删除项目本身的情况下移除HABTM相关项目?如何删除单个HABTM关联商品而不删除商品本身?

例如,假设我有3名学生在科学课上在一起。如何删除ScienceClasses表中的Science对象而不删除实际的科学参考?我猜0123,不是一个好主意。

我正在使用JavaScript进行拖放操作来添加和删除,而不是复选框。有什么想法吗?

回答

57

我倾向于使用的has_many:通过,但你尝试过

student.classes.delete(science) 

我认为需要有目标对象,而不仅仅是ID,是HABTM的限制(因为连接表被抽象掉为了您的方便)。如果你使用has_many:通过你可以直接在连接表上操作(因为你得到一个模型),并且可以让你将这种事情优化成更少的查询。

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核心的名称!

+0

那么它的方式目前正在建立,我必须使用PARAMS [:类标识码]执行Class.find_by_id然后使用发现课堂要做到这一点。如果我只能说“Student.class_ids.remove [2]”,那将会很好。 – 2009-07-07 03:57:14

0

如果你想删除多个相关联的项目,你可以使用*写:

student.classes.delete(*classes_array) 
相关问题