由于关系,DataMapper 无法删除记录

2024-03-01

我使用 Torrent 和 Tag 设置了多对 DataMapper/MySQL,如下所示:

class Torrent
  include DataMapper::Resource

  property :id,          Serial
  property :name,        String
  property :magnet,      Text
  property :created_at,  DateTime

  has n, :tags, :through => Resource
end

class Tag
  include DataMapper::Resource

  property :id,      Serial
  property :name,    String
  property :hits,    Integer

  has n, :torrents, :through => Resource
end

然而,当试图破坏种子时,通过Torrent.first.destroy或类似的东西,DataMapper 返回false.

我尝试过直接 SQL 查询,例如delete from torrents where name like '%ubuntu%',由于 MySQL 错误 1451 而失败:

ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key constraint fails (`brightswipe`.`tag_torrents`, CONSTRAINT `tag_torrents_torrent_fk` FOREIGN KEY (`torrent_id`) REFERENCES `torrents` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION)

我认为有一些 DataMapper 设置,在删除 torrent 时我可以:

  1. 删除标签关联
  2. 删除种子

当删除标签时,我可以:

  1. 从具有该标签的所有种子中删除标签关联
  2. 删除标签

我该怎么办?


尝试使用此插件自动管理关系:

https://github.com/datamapper/dm-constraints https://github.com/datamapper/dm-constraints

这将允许您销毁 M:M assocs,尽管您必须手动清理 assocs 表:

class Tag
  ...
  has n, :torrents, :through => Resource, :constraint => :skip

class Torrent
  ...
  has n, :tags, :through => Resource, :constraint => :skip

另外一个选择是手动从 assocs 表中删除关系,然后您可以毫无问题地删除项目,因为您通过从 assocs 表中删除相应条目来破坏关系。

基本示例:

tr = Torrent.create
tg = Tag.create

tr.tags << tg
tr.save

tg.torrents << tr
tg.save

# destroying relation

TagTorrent.first(:tag => tg, :torrent => tr).destroy!

# or
tr.tag_torrents(:tag => tg).destroy

# or
tg.tag_torrents(:torrent => tr).destroy

# destroy items

tr.destroy!
tg.destroy!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

由于关系,DataMapper 无法删除记录 的相关文章

  • 为什么包含此模块不会覆盖动态生成的方法?

    我试图通过包含一个模块来覆盖动态生成的方法 在下面的示例中 Ripple 关联添加了rows 方法表 我想调用该方法 但之后还要做一些额外的事情 我创建了一个模块来重写该方法 认为该模块的row 可以打电话super使用现有的方法 clas
  • spring 如何允许延迟加载?

    如果您在 Dao 方法中有一个调用 例如 伪代码 return getHibernateTemplate 通过 id 获取 现在假设该实体有一个延迟加载的集合 使用 hibernateTemplate 辅助方法从 Dao 返回后 会话如何保
  • Capistrano:deploy.rb 文件重构

    我的deploy rb中有以下代码 namespace app do desc copies the configuration frile from shared config yml to config task copy config
  • 使用Perl/DBI/MySQL/InnoDB查找外键信息

    我想以编程方式查找 MySQL 数据库中特定 InnoDB 表的外键 我正在使用 Perl 我偶然发现 dbh gt foreign key info 我刚刚尝试使用它 但似乎有点错误 它不会返回 ON DELETE 和 ON UPDATE
  • 什么时候应该使用 C++ 而不是 SQL?

    我是一名 C 程序员 偶尔使用 MySQL 来处理数据库 但我的 SQL 知识相当有限 但我肯定愿意改变这一点 目前 我正在尝试仅使用 SQL 查询对数据库中的数据进行分析 但我准备放弃了 转而将数据导入到C 中 用C 代码进行分析 我和同
  • 无法在 Mac 上启动 MySQL

    使用 Brew 安装后 我无法运行 MySQL 我使用的是 OS X El Capitan 版本 10 11 3 和 MySQL Server 版本 5 7 11 当我启动服务器时 我收到 启动 MySQL 错误 服务器退出而不更新 PID
  • 在 PlayFramework 2 / Ebean ORM 中使用 @OneToOne,其中子级和父级共享相同的主键

    有两种型号 模型 User java Entity Table name users public class User extends Model Id public int user id public String firstName
  • 非常大的字段会对 MySQL 数据库产生负面影响吗?

    我目前正在使用 Django 构建一个网站 并希望托管用户生物样式页面 该页面可能长达几 KB 这些字段不一定需要搜索 但在查找用户名时确实需要提供 将这些数据存储在数据库中会产生负面影响吗 如果我使用带有数据库链接的静态文本文件 我的服务
  • 为 Rails 上的 postgresql 创建用户

    我选择 postgresql 作为我的 Rails 数据库 但当我尝试运行 rake db create all 时 我遇到了一个明显常见的错误 即 致命 角色 app 不存在 我找到了两种解决方案 但我不确定哪一种是正确的 有一个网站说
  • 对范围值进行排序

    我想对表示数值范围的字符串数组进行排序 如下所示 b 0 5 100 250 5 25 50 100 250 500 25 50 使用sort我得到的方法 b sort gt 0 5 100 250 25 50 250 500 5 25 5
  • 由于 MIME 类型不受支持,拒绝应用样式

    我不断收到一条错误消息 指出 MIME 类型 text html 不可执行或不是受支持的样式表 MIME 类型 并且启用了严格的 MIME 检查 我的链接代码是
  • Mysql用in语句限制

    我正在写一个查询 SELECT user bookmarks id as user bookmark id bookmark id user bookmarks user id bookmark url bookmark website b
  • 如何使 Yard `@macro` 应用于多个文件

    如果我有在one file下列 module Something class Resource Defines a new property param String name the property name param Class t
  • MySQL 与日语字符

    我试图弄清楚如何创建一个表 以便我可以在其中插入日语名字 现在我有 Type InnoDB Encoding UTF 8 Unicode utf8 Collation utf8 general ci 但是 当我插入字符时 它显示为 当我使用
  • SQL查询查找表的主键?

    我怎样才能找到哪一列首要的关键使用查询来创建表 这是重复的question https stackoverflow com questions 893874 mysql determine tables primary key dynami
  • 如何检查字符串是否为有效日期

    我有一个字符串 31 02 2010 并想检查它是否是有效日期 最好的方法是什么 我需要一个方法 如果字符串是有效日期 则返回 true 如果不是 则返回 false require date begin Date parse 31 02
  • 随机组合 MySQL 数据库中的两个单词

    我有一个包含名词和形容词的数据库 例如 id type word 1 noun apple 2 noun ball 3 adj clammy 4 noun keyboard 5 adj bloody ect 我想创建一个查询 它将抓取 10
  • 在 android 中建立与 MySQL 的池连接

    我需要从我的 Android 应用程序访问 MySQL 数据库 现在所有的工作都通过 DriverManager getConnection url 等等 但我必须从多个线程访问数据库 所以我必须使用连接池 问题1 是 com mysql
  • mysql排序和排名语句

    我需要一些 mysql 语句的帮助 我的表 1 有 7 列 表 2 有 8 列 额外的列名为排名 我的语句应该是这样的 从表 1 中选择全部 然后按 用户数 排序 将其插入表 2 中并排名开始 1 2 3 等 table 1 usernam
  • “heroku”命令存在于以下 Ruby 版本中:

    我在使用 heroku 工具带时遇到了重大问题 我正在使用 cedar 14 堆栈 当我尝试使用不是的 ruby 版本时ruby 2 0 0 dev我收到这个错误 rbenv heroku command not found The her

随机推荐

  • Airflow - 跳过未来的任务实例而不更改 dag 文件

    我有一个 DAG abc 计划在每天上午 7 点 美国中部标准时间 运行 并且该 DAG 中有任务 xyz 由于某种原因 我不想为明天的实例运行任务 xyz 之一 如何跳过该特定任务实例 我不想对代码进行任何更改 因为我无权访问 Prod
  • 未加载用于在 Visual Studio 2012 中调试自定义项目的符号文件

    我在 Visual Studio 2012 中有一个大型解决方案 其中包含可执行文件和类库项目 调试应用程序时 不会命中某一特定类库项目中的断点 我看了看调试 gt 窗口 gt 模块窗口检查该项目的符号状态 它说 找不到或打开 PDB 文件
  • 我是否需要对使用 NewIntArray 创建的数组调用 ReleaseIntArrayElements?

    我有一个本机方法可以对位图进行一些工作 在该方法内部 我通过方法调用获取图像数据 该方法调用将数据写入jintArray我用它创建的参数NewIntArray jintArray pixels env gt NewIntArray widt
  • Grafana 条形宽度太小

    我想知道如何在直方图中获得更大的条形宽度 例如条形图 This is the graph how it looks rigth now And this is the corresponding query in flux 在 Grafan
  • Ninject.Web.PageBase 仍然导致对注入依赖项的空引用

    我有一个使用 Ninject 2 0 的 ASP NET 3 5 WebForms 应用程序 但是 尝试使用 Ninject Web 扩展来提供对 System Web UI Page 的注入 即使我切换到使用服务定位器来提供引用 使用 N
  • H2索引名称唯一性

    我对 h2 数据库中索引名称的唯一性有一个小问题 使用 mysql mariadb 可以同时为表 A 和表 B 定义名为 X 的索引 对于 h2 数据库这是不可能的 因为每个数据库的索引名称应该是唯一的 这对我来说是一个问题 因为我有一个基
  • 如何安排本地 Azure DevOps 构建每 5 分钟运行一次?

    不用管理由 我有一个案例 需要每 5 分钟运行一次构建 本地安装不支持 YAML 中的计划 那么 我们该怎么做呢 我可能可以使用 REST Api 但这很糟糕 因为我似乎要么创建一个一次性脚本 要么创建一个用于非常简单类型的计划的脚本 似乎
  • 丢包纠错码 (UDP)

    我不知道要寻找什么 因为我从 纠错代码 中得到的只是与您不知道错误位置的情况相关的内容 因此 这些代码比我需要的要复杂得多 而且效率低下 在下文中 请注意位等于数据包 因为只有整个数据包可能会丢失 因此位类比非常适合 是否有 ECC 考虑到
  • 授予某个数据库中所有存储过程的执行权限

    正如标题所示 我需要授予数据库中每个存储过程的执行权限 我们已经从测试转向生产 对生产数据库的控制减少了 并且所有导入的存储过程现在都获得了零权限 一件有趣的事情是 是否有任何方法可以确保所有导入的存储过程从一开始就获得执行权限 谢谢你的帮
  • 如何计算两个日期之间的天数?

    例如 输入框中给出两个日期
  • pip 安装 PIL 失败

    我正在尝试安装 pip 包 PIL 但是安装不起作用并抛出以下错误 Could not find a version that satisfies the requirement pil from xhtml2pdf 0 0 4 gt r
  • 我们可以在单独的模块中使用 Flask 错误处理程序吗

    我们正在将 Flask 应用程序从基于函数的视图迁移到可插入视图 除了错误处理程序之外 一切都按预期工作 我试图将所有错误处理程序放入一个名为 error handlers py 的模块中 并将其导入到主模块中 但它不起作用 尝试在 Goo
  • 如何同步两个 Oracle 数据库?

    我想创建一个项目 其中需要将本地数据库与远程数据库同步 本地数据库中所做的更改必须反映到远程数据库 这必须同步完成 我有一个应用程序 它对用 java jpa 编写的本地数据库执行 CRUD 操作 同步应该由 java 代码触发 我想到了数
  • 宽度等于动态高度平方[重复]

    这个问题在这里已经有答案了 当高度为父级 div 的 时 是否可以使用 css 或 js 将元素的宽度设置为与其高度相匹配 如果调整浏览器窗口的大小 子 div 也需要更改大小 Example body html height 100 pa
  • 元数据集合中已存在标识为“Id”的项目。参数名称:项目

    我的所有实体都有一个基类 public class Entity
  • 使用 Django 创建可编辑的 HTML 表格

    我正在尝试创建一个 Django 应用程序 用户可以在其中创建电影列表 每次用户登录时 他们的电影列表都会以表格形式呈现给他们 该表将包含三列 一列用于电影名称 一列用于类型 另一列包含删除按钮 允许用户删除与该按钮对应的行 用户可以通过在
  • Tensorflow 2.1.0 错误,模块“tensorflow”没有属性“GraphKeys”

    我今天刚刚安装了新的 tf 和 cuda 但是当我运行之前与 tf 1 4 一起使用的代码时 在新的 tensorflow 2 1 0 和 cuda 10 1 下将无法工作 如何解决这个问题 为了社区的利益 在答案部分提及解决方案 即使它出
  • 如何避免 getter 和 setter

    我在很多地方读到过 getter 和 setter 是邪恶的 我明白为什么会这样 但我不知道如何完全避免它们 Say Item 是一个包含有关商品名称 数量 价格等信息的类 ItemList 是一个类 它有一个项目列表 要查找总计 int
  • 提供隐藏内部函数的 C API 的最佳实践[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我编写了一个 C 库 其中包含一些 h 文件和 c 文件 我将其编译为 a 静态库 我想只向用户公开某些功能 并使其余功能尽可能 模糊 以使逆向
  • 由于关系,DataMapper 无法删除记录

    我使用 Torrent 和 Tag 设置了多对 DataMapper MySQL 如下所示 class Torrent include DataMapper Resource property id Serial property name