如何在不删除项目本身的情况下删除 HABTM 相关项目?
例如,假设我有 3 个学生一起上科学课。如何从 StudentClasses 表中删除 Science 对象而不删除实际的 Science 参考?我猜这 Student.Classes.first.delete
不是一个好主意。
我正在使用带有拖放功能的 JavaScript 来添加和删除,而不是复选框。有什么想法吗?
如何在不删除项目本身的情况下删除 HABTM 相关项目?
例如,假设我有 3 个学生一起上科学课。如何从 StudentClasses 表中删除 Science 对象而不删除实际的 Science 参考?我猜这 Student.Classes.first.delete
不是一个好主意。
我正在使用带有拖放功能的 JavaScript 来添加和删除,而不是复选框。有什么想法吗?
我倾向于使用 has_many :through,但你尝试过吗
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 核心的名称!
如果要删除多个关联项目,可以使用*
并编写:
student.classes.delete(*classes_array)