如何在不删除项目本身的情况下删除与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核心的名称!

Ruby-on-rails相关问答推荐

HTTP:MimeNegotiation::InvalidType(html不是有效的MIME类型):""

如何在rails 7中禁用Simple_Form验证

发送不调用类或模块中的私有方法

Rails ActiveRecord::LogSubscriber 不输出详细查询日志(log)

创建大哈希的 Ruby 方法

Heroku 应用程序上的远程 mysql 数据库

键入rails 控制台无法启动?

Rails 是否带有未授权异常?

从 Authlogic 迁移到 Devise

判断 DateTime 值是今天、明天还是以后

rails 模型 has_many 本身

Rails 引擎中的迁移?

使用 AJAX 向 Rails 发送 Authenticity Token 的正确方法

按周/月/等和 ActiveRecord 分组?

rails 4 before_validation on: :create 或 on: :save

确认后如何进行设计重定向

Rails:如何修复‘生产’环境缺少 secret_key_base

扩展 Devise SessionsController 以使用 JSON 进行身份验证

如何在 Rails 表单中将复选框和标签保持在同一行?

Ruby 中的类别名