如何删除单个HABTM关联商品而不删除商品本身?

如何在不删除项目本身的情况下移除HABTM相关项目?

例如,假设我有三个同学在科学课上。 如何删除StudentsClasses表中的科学对象而不删除实际的科学参考? 我猜, Student.Classes.first.delete不是一个好主意。

我使用JavaScript进行拖放来添加和删除,而不是checkbox。 有什么想法吗?

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

 student.classes.delete(science) 

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

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

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

 student.classes.delete(*classes_array)