after_initialize 和 after_find 回调在 Active Record 对象生命周期中的顺序?

2024-03-09

来自 Rails 指南。回调可以挂接到 Active Record 对象的生命周期中。按照执行顺序,它们是(从 Rails Guides 复制的):

创建对象

  • before_validation
  • after_validation
  • before_save
  • around_save
  • before_create
  • around_create
  • after_create
  • after_save
  • after_commit/after_rollback

更新对象

  • before_validation
  • after_validation
  • before_save
  • around_save
  • before_update
  • around_update
  • after_update
  • after_save
  • after_commit/after_rollback

摧毁一个物体

  • before_destroy
  • around_destroy
  • after_destroy
  • after_commit/after_rollback

我想知道该放在哪里after_initialize and after_find进入上面?我认为after_initialize应该放在前面before_validation and after_find不属于他们三个中的任何一个。我对么?谢谢。


The after_initialize and after_find回调是两个特殊的回调。

定义回调的唯一方法after_find and after_initialize事件是将它们定义为methods。如果您尝试将它们声明为handlers,他们会被默默地忽略。

来自API http://api.rubyonrails.org/classes/ActiveRecord/Callbacks.html

after_find and after_initialize每个都会触发回调 由查找器找到并实例化的对象,其中after_initialize新对象实例化后触发 以及。

来自Guides http://guides.rubyonrails.org/active_record_callbacks.html#after-initialize-and-after-find

The after_initialize每当活动时都会调用回调 Record 对象是通过直接使用 new 或当 记录是从数据库加载的。避免这种需要可能很有用 直接覆盖您的 Active Record 初始化方法。

The after_find每当 Active Record 加载时都会调用回调 数据库中的一条记录。after_find之前被调用after_initialize如果两者都定义了。

The after_initialize and after_find回调没有前_* 同行,但它们可以像其他 Active 一样进行注册 记录回调。

class User < ActiveRecord::Base
  after_initialize do |user|
    puts "You have initialized an object!"
  end

  after_find do |user|
    puts "You have found an object!"
  end
end

>> User.new
You have initialized an object!
=> #<User id: nil>

>> User.first
You have found an object!
You have initialized an object!
=> #<User id: 1>

放在哪里after_initialize and after_find在 AR 对象生命周期中?

因为它们与所有其他回调不同,而且它们没有before_* 对应项,所以作者(指Guides http://guides.rubyonrails.org/active_record_callbacks.html#after-initialize-and-after-find作者在这里)可能有兴趣将它们分开,因为它们是特殊情况。

最后我同意把after_initialize before before_validation。可能是这样。

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

after_initialize 和 after_find 回调在 Active Record 对象生命周期中的顺序? 的相关文章

  • 获取设备中的当前用户ID

    如何使用设备获取控制器中的当前用户 ID 在我的控制器中我有这样的东西 def index me current user c User find me sheets c time sheets end 我收到一条错误消息 无法找到没有 I
  • 从 Ruby 中的 DateTime 变量获取时间

    我在 ruby 中工作 我有一个包含数据库中今天的日期时间的对象 我只想要时间截断数据 我怎样才能得到那个 Try 日期时间 strftime http www ruby doc org stdlib 1 9 3 libdoc date r
  • 为什么 mongrel 没有在 Rails 3.2.rc 中启动?

    启动 mongrel 的 GEMFILE gem rails 3 1 0 gem mongrel gt 1 2 0 pre2 启动 WEBrick 的 GEMFILE 不是杂种 gem rails 3 2 0 rc2 gem mongrel
  • 使用模板返回值。如何处理无效退货?

    我有这样的存储回调函数的结构 template
  • 预期的 ProductField,出现数组问题

    我有一个 Rails 4 应用程序 它有一个如下所示的 params 块 def store params params require store permit name description user id products attr
  • .NET 远程处理回调

    是否可以通过远程处理传输回调 我想做一些类似的事情myRemoteObject PerformStuff x gt Console WriteLine x 如果没有 我将如何实现等效的功能 Edit 我知道 Remoting 已被 WCF
  • 为什么“捆绑”会在我的开发机器上安装生产 gem?

    Gemfile 说 gem sqlite3 groups gt development test gem mysql2 group gt production 然而当我打字时bundle install在我的开发机器上安装了所有 gem 我
  • 创建一个简单的 Rails 3 文本助手 Gem [重复]

    这个问题在这里已经有答案了 我一直在开发我的第一个 Rails 3 插件 以打包一个我喜欢在ApplicationHelper我所有的应用程序 你可以看到整个代码在 Github 上 https github com burlesona s
  • Rails 3 + angularjs + 缩小在生产中不起作用:未知提供者:eProvider

    我已遵循我能找到的所有修复缩小的说明 例如 var MyController function renamed scope renamedGreeter MyController inject scope greeter and someM
  • 如何从引擎覆盖 Rails 应用程序路由?

    我有一个 Rails 应用程序 我正在尝试将 Rails 引擎集成到其中 主机应用程序有一些捕获所有路由 magic urls match gt admin rendering show match path edit gt admin r
  • Rails/Nginx 中的超时——最佳实践

    我正在开发一个应该在 Nginx 服务器上运行的 Rails 应用程序 根据输入 应用程序可能需要很长时间来处理请求 或者在出现错误时挂起 因此我想防止进程永远运行 除了确保客户端收到超时信号的 Nginx 配置之外 我想我可能仍然需要确保
  • Rails:named_scope、lambda 和块

    我认为以下两个是等效的 named scope admin lambda company id conditions gt company id company id named scope admin lambda do company
  • 使用 Ruby aws-sdk 跟踪文件到 S3 的上传进度

    首先 我知道SO中有很多与此类似的问题 在过去的一周里 我读了大部分 如果不是全部 但我仍然无法让这项工作为我工作 我正在开发一个 Ruby on Rails 应用程序 允许用户将 mp3 文件上传到 Amazon S3 上传本身工作正常
  • Windows 7 x64 上的 Ruby on Rails SQLite 问题

    当我尝试做的时候db create使用 Windows 7 x64 在具有此数据库配置的 sqlite 数据库上 development adapter sqlite3 database db development sqlite3 tim
  • Rails 4 使用 ajax、jquery、:remote => true 和 respond_to 渲染部分

    使用 AJAX 动态渲染页面以响应提交的表单似乎很常见 其他类似的问题都没有集中于如何以一般方式做到这一点 我能找到的关于这个主题的最好的博客文章在这里 http www gotealeaf com blog the detailed gu
  • Rails Windows Vagrant 响应时间非常慢

    我在跑 Vagrant 1 7 1 Rails 4 1 4 Thin 1 6 1 Windows 7 每个静态文件的发送时间都超过一秒 在我的 PC 上加载一个页面可能需要大约 20 秒 而在同事的 Linux 机器上则只需瞬间 有一些帖子
  • RoR - Rails 中的大文件上传

    我有一个 Rails Web 应用程序 允许用户上传视频 视频存储在 NFS 安装的目录中 当前的设置适用于较小的文件 但我也需要支持大文件上传 最多 4GB 当我尝试上传 4GB 文件时 它最终会发生 但从用户体验的角度来看很糟糕 上传开
  • 如何将 'IN (1,2,3)' 与 findAll 一起使用?

    我需要从数据库中获取几个学生 并且我将他们的主键放在以逗号分隔的字符串中 通常使用 SQL 会是这样的 cleanedStudentIdStringList 1 2 3 4 SELECT FROM Student WHERE id IN c
  • 使用rSpec 测试delayed_job 链的最佳方法是什么?

    目前 当我的代码中有一个延迟方法时 如下所示 CommentMailer delay deliver comments comment true 我在规范中写了这样的内容 dj mock DelayProxy CommentMailer s
  • 检测 Google 验证码的挑战窗口何时关闭

    我正在使用谷歌隐形验证码 有没有办法检测挑战窗口何时关闭 我所说的挑战窗口是指您必须选择一些图像进行验证的窗口 目前 我在按钮上放置了一个旋转器 一旦单击按钮 就会呈现验证码挑战 无法向用户提示另一个质询窗口 我以编程方式调用渲染函数 gr

随机推荐

  • 如何禁用 Kivy 中的小部件?

    我阅读了 Kivy 教程 但找不到如何禁用小部件 例如按钮 def foo self instance args main business logic and then instance disable False type instan
  • 如何在弹性搜索中对多个索引的结果进行排序和限制

    我有 4 个索引 分别称为index1 idndex2 index3 和index4 假设结果集中有数百个结果 现在我只想 top 10 rows result from index1 top 10 rows result from ind
  • 比较 R 中的两个表以查找客户未购买的产品

    我有两个表如下 Cust list lt data frame stringsAsFactors FALSE Customer c Mike S Tim P Type c Shoes Socks Product ID c 233 6546
  • 在 Android 中将 JSON 对象传递给 parse.com

    这是一个相当简单的问题 但由于我没有使用 parse com Android 内置 SDK 所以我陷入了困境 我试图通过 Android 中的以下内容将数据传递到 parse com 即使该对象是在没有数据的情况下创建的 但当我包含数据时它
  • 软件“发行版”和“版本”之间有什么区别(如果有)?

    标题说明了一切 软件 发行版 和 版本 之间有什么区别 如果有 这两个定义有重叠吗 是否所有版本和候选版本都是版本 但并非所有版本都是版本 这是一个简单的解释 构建 可执行文件或通过编译源代码创建的库 版本 软件版本 新版本是不同的版本 发
  • GroupBy - 如何使用 diff() 从 DateTime 中提取秒数

    我有以下数据框 In 372 df 2 Out 372 A ID3 DATETIME 0 B 028 b76cd912ff 2014 10 08 13 43 27 1 B 054 4a57ed0b02 2014 10 08 14 26 19
  • 如何以编程方式锁定 BLACKBERRY 设备(6.0)?

    如何以编程方式锁定黑莓设备 6 0 有一个API叫做 ApplicationManger locksystem true 但在 6 0 中已不再使用 根据BlackBerry OS 7 1 API 文档 http www blackberr
  • 无法使用 TagBuilder 组合标签

    我正在尝试构建一个组合标签 第一个标签 span class requiredInidicator span 第二个标签
  • 访问另一个 osgi 包中的资源?

    我使用 eclipse 插件项目向导 使用 eclipse Helios 创建了两个 OSGI 包 A 和 B 在捆绑包 B 的清单文件中 我添加了捆绑包 A 作为依赖项 此外 我已导出 A 中的包 以便它们对 B 可见 我在捆绑包 A 中
  • 一列中有多个值的 SQL 查询

    我一直在桌子上敲着头试图解决这个问题 我有一个表 用于存储作业信息以及作业未完成的原因 原因为数字 01 02 03 等 待处理的工作可能有两个原因 如果您选择两个原因 它们将存储在同一列中 并以逗号分隔 这是一个来自JOBID table
  • .one() 和 .scalar() 有什么区别

    之间的主要区别是什么 one and scalar 在 SQLAlchemy 中 因为两者都执行相同的工作 我看到一些网站 例如教程点 com https www tutorialspoint com sqlalchemy sqlalche
  • 从已建立的 SqlConnection 确定 TLS 版本

    在实时系统中 我们使用以下命令与各种 MSSQL 服务器建立多个连接SqlConnectionC 中的对象 由于客户端正在将其 SQL 服务器更新到 TLS 1 2 我想知道是否有办法确定活动连接上正在使用哪种 TLS 实现 如果可能的话
  • List 上的 Any() 方法无法按预期工作

    我正在 winforms 中开发 net 4 6 这里的代码来自测试控制台应用程序 有一次我有一张清单DateTime我需要弄清楚这个列表是否包含特定日期 为此我正在尝试使用Any 在名单上 即使列表确实包含所需的日期 Any 回报fals
  • 自动换行不适用于 UILabel

    使用自动布局我无法在代码中覆盖我的标签 我已经在 IB 中设置了标签属性 Lines 0 LineBreaks Word Wrap 但我将高度设置为单行 因为选择的单元格决定了标签中的文本内容 所以有时标签只有一行 在我看来DidLoad
  • 日期格式中月份和日期的固定长度?

    有没有什么方法可以将日期对象格式化为固定长度的日和月 以便在列中良好对齐 例如 15 May 2010 10 January 2010 代替 15 May 2010 10 January 2010 Thanks 看看java util Fo
  • 通过 C++ 程序在 PowerShell 中打印 unicode 字符

    我的最终目标是通过 C 程序将一些非拉丁文本输出写入 Windows 中的控制台 cmd exe 对我毫无帮助 所以我得到了最新的 闪亮的 PowerShell 版本 支持 unicode 我已经确认我可以 输入非 unicode 字符和
  • jQuery - 如何检查特定 DIV 中是否单击了任何链接?

    在 HTML 代码中 我的页面包含 div a href Link1 a a href Link2 a div div a href Link info a a href My profile a div div a href Link1
  • Flask 和 sys.excepthook

    我想将全局异常处理对象添加到我的 Flask web 项目中 在创建应用程序类的主模块中 我添加了代码来覆盖sys excepthook 这是简单的测试代码 import sys def my exception hook exceptio
  • 字符串分词器、分隔符

    我正在使用这段代码 StringTokenizer tokenizer new StringTokenizer line 分割以下字符串 hi my name is visghal what is yor name name being t
  • after_initialize 和 after_find 回调在 Active Record 对象生命周期中的顺序?

    来自 Rails 指南 回调可以挂接到 Active Record 对象的生命周期中 按照执行顺序 它们是 从 Rails Guides 复制的 创建对象 before validation after validation before