从加入的 table 中删除活动记录条目而不删除原始记录
Deleting an active record entry from a joined table without deleting the orginal
我正在开发使用 ruby on rails
编写的 Web 应用程序
数据库中存在课程模型。
用户可以保存 he/she 计划参加的课程。
我通过 current_user.courses table 来实现这一点。 (courses_users)
但是,如果用户希望删除已保存的课程,我会像这样使用该 ID 发出删除请求
current_user.courses.find_by(id: params[:id]).destroy
我最终删除了已加入 table 中的条目和课程 table 中的条目。我通过查看服务器日志确认了这一点并发现
DELETE FROM `courses_users` WHERE `courses_users`.`course_id` = 219
SQL (0.4ms) DELETE FROM `courses` WHERE `courses`.`id` = 219
当我只想要第一个时,执行上述两个操作。
有没有办法只删除加入的 table 中的条目?或者这是否违背了连接 table 的性质?如果是这样,是否有更有效的方法来实现此功能?
如有任何帮助,我们将不胜感激,如果您需要我 post 还有什么问题,请询问。
谢谢,
编辑:两个模型之间的关系:
一个用户has_and_belongs_to_many门课程
和一门课程 has_and_belongs_to_many 用户
您的代码说要销毁课程,这就是 ActiveRecord 正在做的事情。
您想删除关联,而不是破坏用户或课程。
解决方法是使用collection.delete(object, …)
这通过从连接 table 中删除关联来从集合中删除每个对象。
这不会破坏对象。
示例代码:
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
下面一行删除了id为params[:id]
的课程记录
current_user.courses.find_by(id: params[:id]).destroy
我想你的意思是:
current_user.courses.delete( params[:id] )
我正在开发使用 ruby on rails
编写的 Web 应用程序数据库中存在课程模型。 用户可以保存 he/she 计划参加的课程。 我通过 current_user.courses table 来实现这一点。 (courses_users)
但是,如果用户希望删除已保存的课程,我会像这样使用该 ID 发出删除请求
current_user.courses.find_by(id: params[:id]).destroy
我最终删除了已加入 table 中的条目和课程 table 中的条目。我通过查看服务器日志确认了这一点并发现
DELETE FROM `courses_users` WHERE `courses_users`.`course_id` = 219
SQL (0.4ms) DELETE FROM `courses` WHERE `courses`.`id` = 219
当我只想要第一个时,执行上述两个操作。
有没有办法只删除加入的 table 中的条目?或者这是否违背了连接 table 的性质?如果是这样,是否有更有效的方法来实现此功能?
如有任何帮助,我们将不胜感激,如果您需要我 post 还有什么问题,请询问。
谢谢,
编辑:两个模型之间的关系:
一个用户has_and_belongs_to_many门课程
和一门课程 has_and_belongs_to_many 用户
您的代码说要销毁课程,这就是 ActiveRecord 正在做的事情。
您想删除关联,而不是破坏用户或课程。
解决方法是使用collection.delete(object, …)
这通过从连接 table 中删除关联来从集合中删除每个对象。
这不会破坏对象。
示例代码:
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
下面一行删除了id为params[:id]
current_user.courses.find_by(id: params[:id]).destroy
我想你的意思是:
current_user.courses.delete( params[:id] )