为什么after_find和after_initialize事件的回调要将它们定义为方法?

2024-04-24

定义 after_find 和 after_initialize 事件回调的唯一方法是将它们定义为方法。如果您尝试使用第二种技术将它们声明为处理程序,它们将被默默地忽略。

有人能解释一下为什么会这样吗?

为什么专门针对这两个回调呢?

EDIT

摘自书中:—— Rails 必须使用反射来确定是否有要调用的回调。当进行实际的数据库操作时,与数据库开销相比,这样做的成本通常并不显着。但是,单个数据库选择语句可能返回数百行,并且必须为每行调用两个回调。这会显着减慢查询速度。 Rails 团队认为在这种情况下性能胜过一致性。 我勒个去...!!!!仅此而已..仅作为解释...!!!


From the API http://api.rubyonrails.org/classes/ActiveRecord/Callbacks.html:

after_find 和 after_initialize 异常

因为 after_find 和 after_initialize 是为查找器找到并实例化的每个对象调用的,例如 Base.find(:all),所以我们必须实现一个简单的性能约束(在简单的测试用例上速度提高 50%)。与所有其他回调不同,after_find 和 after_initialize 仅在定义了显式实现(def after_find)时才会运行。在这种情况下,将调用所有回调类型。

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

为什么after_find和after_initialize事件的回调要将它们定义为方法? 的相关文章

随机推荐

  • pip + requests.txt:奇怪的行为。不断下载各种版本的pandas

    这是用 pip 和 pandas 观察到的情况 以下是我的要求 txt asgiref 3 3 1 auditlog3 1 0 1 click 7 1 2 auditlog3 dj database url 0 5 0 Django 3 1
  • NSLog 上的 EXC_BAD_ACCESS 没有字符串格式

    我在以下代码行中收到 EXC BAD ACCESS 或 malloc 错误 NSLog Points 这对我来说毫无意义 因为它应该访问字符串常量而不是其他任何东西 通常是 EXC BAD ACCESS 但偶尔会出现以下错误 在同一行 An
  • scanf:内部带有宏(#define 常量)的模板

    我有一些像这样的代码 define MAXSIZE 100 int main char str MAXSIZE 1 scanf 100s str 问题是我仍然有 幻数 100 尽管定义了 MAXSIZE 有没有办法正确地将 MAXSIZE
  • 如何在 Symfony2 控制台命令中设置环境

    希望这是一个简单的问题 在 Symfony2 中运行控制台命令时如何指定使用哪个环境 我创建了一些命令 但是我想在我的临时服务器上的 临时 环境上下文中运行它们 在生产服务器上时在 产品 环境中运行它们 不同的环境定义不同的数据库连接 如何
  • 如何使用 Log4cxx 或 log4j 记录进程 ID

    我正在使用 log4cxx 我的项目 我可以使用 t 标记记录当前线程 id 如何在其中记录进程 id 或 log4j 我正在使用 ConversionPattern 和基于 xml 的配置文件 谢谢 基于以上答案 我将在 log4j 中执
  • 如何修复此警告“useLayoutEffect”相关警告?

    我将 NextJS 与 Material UI 和 Apollo 结合使用 虽然一切正常 但警告没有消失 在我看来 很多 Material UI 组件都在使用使用布局效果React 会发出警告 错误如下 警告 useLayoutEffect
  • ReferenceError:使用 CKEditor 时未定义 self [重复]

    这个问题在这里已经有答案了 ReferenceError 导入 CKEditor 时未定义 self 我正在使用 next js import CKEditor from ckeditor ckeditor5 react 已经安装使用 np
  • float 和 double 精度相关的概念

    为什么精度float小数点后最多 6 位 精度double小数点后最多15位 任何人都可以给一个数学解释 of it 说一下精度float or double是一些小数位数是草率的术语 float and double通常使用 IEEE 7
  • 输入具有最小和最大数字的值

    下面是一个输入数字表单 我使用 JavaScript 添加了一些代码 其中可写入的最小数字为 1 最大可写入数字为 50 当有人尝试输入任何小于 1 且大于 50 的数字时 它会自动将其替换为数字 1 或 50 但我没有成功实现此目标 我需
  • 为什么一个简单的 get 语句这么慢?

    几年前 我在学校接到一项作业 必须并行化光线追踪器 这是一项简单的任务 我真的很喜欢做它 今天 我想对光线追踪器进行分析 看看是否可以让它运行得更快 无需完全修改代码 在分析过程中 我注意到一些有趣的事情 Sphere Intersect
  • 使用 rMarkdown 自动生成报告

    我试图在 rMarkdown 中使用相同的模板生成大约 50 份报告 我不想每次都更改输入文件的名称 并且我想为输出文件选择不同的名称 有什么办法可以自动化这个过程吗 谢谢 另一种选择是在单独的 R 脚本中使用 rmarkdown 包的 r
  • Python OpenCV cv.WaitKey 在 Ubuntu 模 256 映射上正确返回奇怪的输出

    我正在使用 OpenCV 2 2 运行 Ubuntu 11 10 Lenovo T400 我相信导入是通过 import cv2 cv as cv 完成的 如果我只是 导入简历 也会发生这个问题 我最近开始遇到这个问题 这有点奇怪 我不知道
  • 使用 EF6(实体框架 6)编写单元测试

    我有一个使用 NET Framework 4 6 1 和 EF6 的 ASP NET Core 项目 现在我想编写一些单元测试 并且已经花了几个小时来配置内存 SQLite 数据库以使用 EF6 但这不起作用 所以 问题是如何使用 EF6
  • 如何在C++中读取一个字节并将字节的ASCII值保存为整数

    我有一个简单的问题让我困惑 Goal 我想从文件中读取给定的字节 比如第一个字节 并用该字节的 ASCII 值创建 int x 因此 例如 如果字节 字符是 a 我希望 x 为 97 十六进制的 61 我有以下读取文件 example tx
  • ANDROID - 在列表视图中获取选定的 id 评级栏

    我试图找出如何获取所选的 idratingBar in ListView在网上 但大多数人都使用ListViewAdapter or RatingAdapter在另一堂课上 我不知道该怎么做 因为我还不知道 所以我所有的课程都在MainAc
  • 通过 IPython 使用 Jython:readline 仍然是一个问题吗?

    我想将 Jython 解释器与 IPython 一起使用 这样我就可以使用制表符补全之类的东西 也许还可以使用 IPython 笔记本 这IPython 常见问题解答网站 http ipython org faq html围绕这是否可行采取
  • React Navigation - setOptions() headerRight 回调中的访问状态

    我凌驾于一切之上反应导航 https reactnavigation org headerRight内部带有自定义按钮的选项React useEffect 当按下按钮时 我需要访问状态name但我得到的值不是当前的值 const name
  • 强制设置核心数据检查点?

    我编写了一个通过 Core Data 搅动大量数据的应用程序 用户在后台退出应用程序后 我会清理这些数据 由于 WAL 检查点似乎是导致 UI 暂停的主要原因 因此我还想强制使用 WAL 检查点 是的 我知道创建第二个核心数据堆栈 这也将完
  • 手动启动 SharePoint 计时器作业

    我想手动调用安装在 SharePoint 服务器上的计时器作业 有用的是类似于 stsadm 命令的东西 我的场景是 我已将具有大量功能的解决方案部署到客户服务器 我不想等待每周的时间表来启动特定的计时器工作 我想输入一个命令来立即运行特定
  • 为什么after_find和after_initialize事件的回调要将它们定义为方法?

    定义 after find 和 after initialize 事件回调的唯一方法是将它们定义为方法 如果您尝试使用第二种技术将它们声明为处理程序 它们将被默默地忽略 有人能解释一下为什么会这样吗 为什么专门针对这两个回调呢 EDIT 摘