我应该使用 ON DELETE CASCADE、 :dependent => :destroy 还是两者都使用?

2024-01-02

在 Rails 应用程序中,我在 MySQL 中有外键约束,我将它们全部手动设置,与我的迁移分开。

我想弄清楚我是否应该使用 ActiveRecord:dependent => :destroy选项。例如,在我的架构中我有表......

users
-----

log_entries
-----------
user_id  # Has FK constraint to users.id with ON DELETE CASCADE

在我的模型中我可以......

class User < ActiveRecord::Base
  has_many :log_entries, :dependent => :destroy
end

我是否应该忽略模型的依赖选项并将其留给数据库?或者把它放在那里很好吗?删除此应用程序中的内容时,我不需要运行任何回调。在所有情况下,只需删除它们就可以了。

另一个需要考虑的因素是 FK 约束不会出现在我的测试环境中,可能是因为rake db:test:prepare没有设置它们。因此,如果我完全依赖 MySQL 进行级联删除,则很难测试会发生什么。


如果您的 FK 带有 ON DELETE CASCADE,则不应在模型中使用 dependent => :destroy。它可以运行不必要的查询,并且您不能指望它将来不会破坏事情。您应该在模型文件中添加注释来记录它的发生。尽管。

我还建议在迁移中进行 FK。如果您的测试数据库具有与生产数据库相同的约束,那就更好了,这可能会导致非常隐蔽的错误。有一个 RedHill 插件 (redhillonrails_core),可以使迁移中的外键变得容易,并支持具有 FK 约束的模式转储,因此测试要简单得多。

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

我应该使用 ON DELETE CASCADE、 :dependent => :destroy 还是两者都使用? 的相关文章

  • Rails 3 Mechanize - SocketError:getaddrinfo:主机或名称未知

    我正在使用 mechanize 但出现此错误 有人可以帮帮我吗 我已将元刷新设置为 true 错误日志 SocketError getaddrinfo Host or name not known form C Ruby192 lib ru
  • 回滚后是否应该删除迁移

    我对 ruby 和 Rails 相当陌生 刚刚开始了解迁移 我的问题是回滚后删除迁移的最佳实践或正确时间是什么 到目前为止 我读到的内容是回滚后是否删除迁移的观点问题 但是在团队中工作时删除迁移是否有任何重大影响 以及保留迁移文件相对于删除
  • Laravel leftJoin 仅右表的最后一条记录

    我是 Laravel 的新手 我有两张桌子 1 产品 2 价格 products id product int p key name varchar prices id price int p key id product int
  • Rails 4 的 mobile_fu

    我正在尝试将我的应用程序从 Rails 3 2 13 切换到 Rails 4 在此过程中 我遇到了一个主要障碍 我使用 gem mobile fu 来确定用户是否来自移动设备 该 gem 需要 Railties 3 2 13 但 Rails
  • MySQL Connector C/C API - 使用特殊字符进行查询

    我是一个 C 程序 我有一个接受域名参数的函数 void db domains query char name 使用 mysql query 我测试数据库中是否存在域名 如果不是这种情况 我插入新域名 char query 400 spri
  • Yii2:如何在ActiveRecord中设置默认属性值?

    这似乎是一个微不足道的问题 但是我能想到的所有明显的解决方案都有其自身的缺陷 我们想要的是能够仅为新记录设置任何默认的 ActiveRecord 属性值 使其在验证之前和验证期间可读 并且不会干扰用于搜索的派生类 一旦我们实例化该类 就需要
  • Rails 5:验证复选框的接受

    我有一个带有一些嵌套字段的注册表单 在该表单中我添加了一个服务条款的复选框 我正在尝试验证复选框何时被选中 如果没有 则返回错误 validates acceptance of agreement allow nil gt true acc
  • Rails 从 OrdersController 更新用户模型的属性

    这是我的代码 订单控制器类 def create order Order new params order if order purchase work GATEWAY store credit card options result wo
  • Rails - 安装 Spree 时出现问题

    我在 Rails 应用程序中安装 Spree 时遇到问题 当我运行 gem spree 时 按照说明http spreecommerce com documentation getting started html http spreeco
  • Rails 4 和 Turbolinks - 元标签未更改

    我有一个启用了 Turbo Links 的 Rails 4 应用程序 但在更改页面时无法刷新元标记 不是完全刷新 我读到元标记需要包含在加载涡轮链接的 JavaScript 之前 但它没有效果 完全刷新可以完成这项工作 但不幸的是这不是我所
  • 使用redirect_to :create 动作

    我正在尝试重定向到另一个控制器的创建方法 但是 我找不到将方法设置为 POST 的方法 这将导致调用索引方法 使用 method gt post只是创建一个新参数 但不会更改 http 方法 有什么想法如何重定向到创建方法吗 您无法在重定向
  • Emacs、ruby:将 do 结束块转换为大括号,反之亦然

    我经常发现自己转换这样的代码 before do something end to before something 有没有办法在 emacs 中自动执行此任务 我使用 ruby mode 和 rinary 但它们在这里没有太大帮助 rub
  • 如何在 Play java 中创建数据库线程池并使用该池进行数据库查询

    我目前正在使用 play java 并使用默认线程池进行数据库查询 但了解使用数据库线程池进行数据库查询可以使我的系统更加高效 目前我的代码是 import play libs Akka import scala concurrent Ex
  • Rspec to have(n).items undefined 方法

    我正在尝试遵循指南关于代码 tuts http code tutsplus com tutorials ruby for newbies testing with rspec net 21297我不断收到错误 这是我的库规范 require
  • Ruby gem 环境问题 - LoadError: no such file to load -- robots

    我正在尝试使用 anemone gem 编写一个爬虫 这需要 robots gem 不管出于什么原因 机器人绝对不会包括在内 这是我的一些环境信息 gem list d robots LOCAL GEMS robots 0 10 1 Aut
  • 同一配置文件上的两个不同提供程序

    我在用着实体框架 6 1 0 I have 2 家提供者 MysqlClient 和 SQLServerCE 我需要创建2个不同的DBContext 这迫使我创造2个配置类因为mysql有一些不同的东西 但是当我初始化应用程序时 Datab
  • 使用 Passenger + Apache 相对于 Webrick 的优势

    我想说服我的管理层 使用 Apache 乘客设置是继续生产的方法 而不是使用 webrick 或 mongrel 我从网上找到了一些观点 如果您能添加您的想法 那将非常有帮助 因为这将有力地帮助我表达我的观点 欢迎提供技术细节 如果您有任何
  • 有没有办法使用 Rspec/Capybara/Selenium 将 javascript console.errors 打印到终端?

    当我运行 rspec 时 是否可以让 capybara selenium 向 rspec 报告任何 javascript console errors 和其他异常 我有一大堆测试失败 但当我手动测试它时 我的应用程序正在运行 如果不知道仅在
  • 映射 mysql 中同一个表的多个值

    您好 我必须使用另一个表中的值 id 获取文本值 表 1 包含值 ID 表 2 包含名称和值 ID 表 1 SEVERITY OCCURENCE DETECTABILITY 2 3 4 表 2 id name value 1 Very Hi
  • 如何以 Rails 形式将图像从 上传到具有 Rails Active Storage 的 S3?

    正如标题中所述 我正在尝试使用 Rails 的 Active Storage 从嵌套在 Rails 表单中的元素将图像上传到我的 S3 存储桶 到目前为止我已经能够使用使用 Active Storage 上传图像 这User class h

随机推荐

  • 如何在java中重复播放音频文件

    我怎样才能让音频文件连续重复 现在音乐只播放一次 仅此而已 我试图让声音一遍又一遍地重复 我必须以其他方式获取音频文件还是有更简单的方法 Code import java io File import java io FileInputSt
  • Python 的 itertools.repeat 的目的是什么?

    对于我能想到的 Python 的每一种用途itertools repeat http docs python org py3k library itertools html highlight repeat itertools repeat
  • 如何让 Eclipse Oxygen 在 Java 9 上运行

    我拼命尝试让 Eclipse Oxygen 在 Mac OSX 上运行 Java 9 但似乎失败了 到目前为止我已经完成的步骤 在 Library Java JavaVirtualMachines jdk 9 jdk 中安装了 Java 9
  • Firebase 更新正在制作新的,除了最后一个字符外具有相同的 id

    我正在使用此代码来更新 Firebase 上的数据 但它会生成新的数据 我尝试了很多代码 除了最后一个字符之外 它使用相同的密钥制作新的代码 我按照 Firebase 网站的推荐使用了这个 但它不起作用 我创建了一个新的 下次更新时 Map
  • 检查 Bash 列表中是否存在变量

    我正在尝试在 bash 中编写一个脚本来检查用户输入的有效性 我想匹配输入 比如变量x 到有效值列表 我现在想出的是 for item in list do if x item then echo In the list exit fi d
  • iPad Safari (iOS 5.0.1) 上的 iframe CSS3 缩放问题

    我需要放大 iframe 以使其更大 我无法控制 iframe 内容的源代码 我正在尝试通过以下方式实现它 webkit transform scale 1 3 CSS 属性 iframe 的内容已正确放大 但是当我尝试触摸 iframe
  • Azure Functions DocumentClient 无法从程序集异常加载类型

    我有一个 Azure Function v2 它调用一个实用程序库 该库又实例化一个DocumentClient 当在本地运行我的函数时 它会在此行引发异常 client new DocumentClient new Uri cosmosD
  • 响应开头额外的未定义字符[重复]

    这个问题在这里已经有答案了 这阻止了我使用 JSON 也阻止了使用 React 或 Ember 使用 AJAX 向服务器发送请求时 我收到一个额外的未定义 unicode 字符 这会导致解析器错误 因为它破坏了 JSON 我已经检查了我拥有
  • 自动将公共更改为私有(Java)

    我正在对从其他语言翻译成 Java 的代码进行重构 我想自动完成它 我的问题是 我有很多不是私有的方法 但只是在声明它们的同一个类中调用 并且我想将它们设为私有 我有很多课程 我想是否有什么可以帮助我半自动地完成它 我想知道 你知道我是否可
  • .NET 中的并行抓取

    我工作的公司运营着数百个非常活跃的网站 它决定建立一个搜索引擎 我的任务是编写爬虫 一些网站在旧硬件上运行 无法承受太多惩罚 而另一些网站则可以处理大量并发用户 我需要能够说对站点 A 使用 5 个并行请求 对站点 B 使用 2 个并行请求
  • vtkRenderer 错误

    我是 vtk 的新手 所以我首先使用 CMake 和 Visual Studio 2017 构建 vtk 8 1 1 并使用默认选项和示例 许多示例运行良好 但其中一些会出现错误 这是 CreateTree 示例 但 HelloWorld
  • 无法使用 Gradle 6.1.1 解析 junit-jupiter-params:5.6.2 和 junit-jupiter-engine:5.6.2

    我有一个 Android 项目 其中包含 2 个 Android 模块和 1 个纯 Java 模块 将 android 构建工具更新为 com android tools build gradle 4 0 0 并将 gradle 包装器更新
  • 使用 OAuth2 将 JHipster 中的前端和 API 服务器分开不起作用

    我使用 OAuth2 创建了一个简单的 JHipster 6 2 0 Angular 应用程序 并且还单独生成了一个客户端应用程序 此外 我使用 keycloak yml 为 Keycloak 创建了一个 docker JHipster 附
  • 使用 for 循环在 ggplot2 中添加图层

    我想这很容易 但我不明白 它与 ggplots 上 for 循环的使用有关 问题是 为什么下面这两个代码给出不同的结果 看起来好像在带有循环的代码上 只考虑了第二次迭代 但我不知道为什么 根本问题是 是否可以使用 ggplot2 对象运行此
  • Android 数据存储 IOException 无法重命名为

    我正在尝试在我的项目中实现 Jetpack Datastore 我当时用的是apha 01版本和代码工作正常 然后我在Gradle文件中看到有新版本所以我将其更新为alpha 03 启动我的应用程序后 我遇到了另一个问题 我发现Proto库
  • 为什么我在 Android 上无法检测到带有 unicode 字符的 wifi SSID?

    我有一个 Wi Fi AP 其 SSID 是一串 unicode 字符 例如 我希望 Android 设备连接到它 当我的设备 Nexus One 检测到热点时 SSID 看起来像这样 并且无法识别它 知道如何解决这个问题吗 802 11数
  • Python数据结构按字母顺序排序列表[重复]

    这个问题在这里已经有答案了 我对 python 中的数据结构有点困惑 and 我正在尝试对一个简单的列表进行排序 可能是因为我无法识别数据的类型 所以无法对其进行排序 我的清单很简单 Stem constitute Sedge Eflux
  • Scala:在路径相关上下文中重用路径相关类型产生的泛型

    简而言之 以下内容无法编译 原因如下 我怎样才能使其工作 trait Simulator type CM T def useCM v CM case class CMH S lt Simulator T cm S CM T class Si
  • 查找不平衡的大括号和圆括号

    海湾合作委员会4 6 0 GNU Emacs 23 2 1 我有一些 C 代码 在某些时候我一定犯了一个打字错误 现在我留下了不平衡的花括号或括号 我有大约 2000 行代码 我只是想知道有什么技术可以找到它们吗 Emacs 有一些很好的功
  • 我应该使用 ON DELETE CASCADE、 :dependent => :destroy 还是两者都使用?

    在 Rails 应用程序中 我在 MySQL 中有外键约束 我将它们全部手动设置 与我的迁移分开 我想弄清楚我是否应该使用 ActiveRecord dependent gt destroy选项 例如 在我的架构中我有表 users log