sql - 从连接表中删除事件记录条目而不删除原始记录

标签 sql ruby-on-rails ruby join activerecord

我正在开发一个用 ruby​​ on rails 编写的 web 应用程序

数据库中存在一个类(class)模型。 用户可以保存他/她计划参加的类(class)。 我通过使用 current_user.courses 表来完成此操作。 (类(class)用户)

但是,如果用户希望删除已保存的类(class),我会像这样使用该 ID 发出删除请求

current_user.courses.find_by(id: params[:id]).destroy

我最终删除了连接表中的条目和类(class)表中的条目。我通过查看服务器日志确认了这一点并找到了

DELETE FROM `courses_users` WHERE `courses_users`.`course_id` = 219
SQL (0.4ms)  DELETE FROM `courses` WHERE `courses`.`id` = 219

当我只想要第一个时,执行上述两个操作。

有没有办法只删除连接表中的条目?或者这是否违背了连接表的性质?如果是这样,是否有更有效的方法来实现此功能?

如有任何帮助,我们将不胜感激,如果您希望我发布任何其他内容,请询问。

谢谢,

编辑:两个模型之间的关系:

一个用户拥有_and_belongs_to_many门类(class)

一门类(class)有_and_belongs_to_many 用户

最佳答案

你的代码说要销毁类(class),所以这就是 ActiveRecord 正在做的。

您想删除关联,而不是销毁用户或类(class)。

解决方案是使用collection.delete(object, …)

  • 这通过从连接表中删除关联来从集合中删除每个对象。

  • 这不会破坏对象。

示例代码:

def delete_user_course_association(user_id, course_id)
  user = User.find(user_id)
  course = user.courses.find(course_id)
  user.courses.delete(course) if course 
end

参见 Rails API ActiveRecord Associations has_and_belongs_to_many

关于sql - 从连接表中删除事件记录条目而不删除原始记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27812226/

相关文章:

sql - 计算 SQL 中 CRON 表达式的下一次运行时间

mysql - mysql中的复杂查询用于按日期生成报告

javascript - Rails 3.2 的最佳实践 : Attach javascript functions to window object?

ruby-on-rails - #show 页面上的 ActiveAdmin 嵌套表单

mysql - 为 ruby​​ on rails 编写的 mysql 代码中的错误

mysql - 一次选择中不同条件的最小值和最大值

php - 使用 xampp 在 php 中连接 oracle 数据库

ruby-on-rails - Ruby on Rails RSpec 路由失败

ruby-on-rails - Rails 安装失败 : activesupport requires Ruby version >= 2. 2.2

ruby-on-rails - Rails 的纯 HTML 模板解决方案?