ActiveRecord: Skipping callbacks like after_save or after_update
Active Records provides callbacks, which is great is you want to perform extra business logic after (or before) saving, creating or destroying an instance of that model.
However, there are situations where you can easily fall into the trap of creating an infinite loop.
class Beer < ActiveRecord::Base
def after_save
x = some_magic_method(self)
update_attribute(:my_attribute, x)
end
end
The above will give you a nice infinite loop (which doesn’t scale). It’s possible to update your model, without calling the callbacks and without resorting to SQL.
class Beer < ActiveRecord::Base
def after_save
x = some_magic_method(self)
Beer.update_all("my_attribute = #{x}", { :id => self.id })
end
end
This is a bit unconventional, but it works nicely. You can use all the following ActiveRecord methods to update your model without calling callbacks:
一下方法不会触发callback
* decrement
* decrement_counter
* delete
* delete_all
* find_by_sql
* increment
* increment_counter
* toggle
* update_all
* update_counters
An important warning: These methods don’t do all the nice SQL injection protection stuff you’re used to. In the example, the value of x will be inserted straight into the SQL. I recommend you only use these methods if you’re absolutely sure you’ve cleaned the values you’re inserting.
这些方法没有sql注入的保护,所以必须确保使用时是没有sql注入的。
分享到:
相关推荐
r40_tinav2.1_最终验证通过_使用CB-S来验证OV5640有横条纹fpscamera+SPI2.0成功_20171114_1443没有外层目录.7z 开发板:CB-S 1、(可选修改/调试技巧:) 除了ov5640.c之外,其它的驱动都不编译,节省编译时间!...
UNICODE 全志R16平台TINAV2.1下的CSI接口摄像头ov5640的配置v1.2.txt R16_Camera模块开发说明文档_V1.8.pdf 所有步骤请按照这个说明书执行 1、驱动的编译配置: R:\wyb\gc2145_tinav2.1\lichee\linux-3.4\...
构建过程中提示“Restriction Checker not present, skipping...”,表明在构建时跳过了某些检查步骤。同时,构建环境中的RAM为15.5GB,而文档中指出所需的最小自由内存约为16GB,这可能导致构建过程中出现段错误或...
在本文中,我们将深入探讨如何在IPQ4019平台上使用QSDK添加RM500Q 5G驱动,并通过qmi拨号连接网络。这个过程涉及到几个关键的技术环节,包括驱动集成、网络配置以及IPK包的构建。首先,我们需要了解相关背景知识。...
C4-植物UML C4-PlantUML结合了和的优点,提供了一种使用开放源代码和平台独立工具的直观语言来描述和交流软件体系结构的简便方法(尤其是在前期设计会议期间),尤其是在这种情况下。 C4-PlantUML包含用于使用...
* previous uint32_t and skipping the intervening bytes. */ bitpos = ((sizeof(uint32_t)-1) & (size_t)bitstream); adjbitstream = adjbitstream - bitpos; bs->start = bs->tail = (uint32_t *) ...
"Skipping stone"是一款专为多引力辅助轨迹设计的软件,其核心功能是利用多引力助推技术来优化航天器的轨道路径。多引力辅助(MGA,Multiple Gravity Assist)是一种复杂而高效的航天轨迹规划方法,它允许航天器利用...
logger(1, f"walktree skipping {pathname}\n") # 收集路径 def collectPath(path, isDir=False): if isDir: dirs.append(path) else: files.append(path) # 检查并设置nginx可写的目录权限 def ...
logger(1, "walktree skipping %s\n" % (pathname)); ``` - **功能**:递归地遍历指定目录下的所有文件和子目录。 - **参数**: - `top`:根目录路径。 - `callback`:回调函数,用于处理遍历到的每个路径。 ##...
标题“tmp_stop_skipping”可能指的是一个特定的项目或者代码库,这通常在开发者社区中常见,用于标识某个临时性的或正在进行中的工作。这个描述非常简洁,没有提供具体的信息,因此我们主要依赖标签“Jupyter...
Skipping... ``` 解决方案是在MATLAB的偏好设置中更改MAT文件的版本: 1. 打开MATLAB,点击`File > Preferences > General > MAT-Files`。 2. 选择MAT文件版本为7.3。 **6. 处理内存不足问题** 当MATLAB报告“Out ...
setDescendantFocusability(FOCUS_AFTER_DESCENDANTS); setFocusable(true); final Context context = getContext(); mScroller = new Scroller(context, sInterpolator); final ViewConfiguration ...
语言:English (United States) 禁用文本装饰跳过墨水 恢复以前的Chrome版本63或更早版本的下划线行为。 Chrome 64默认实现墨水跳过! *新增*:“作为一项法律解决方案,Google删除了其流行的“查看图像”功能。...
CAN(Controller Area Network)是一种广泛应用在汽车电子、工业自动化、航空航天等领域的现场总线技术,以其高可靠性、实时性及错误检测能力著称。在Linux系统中,CAN驱动程序是连接硬件CAN控制器与操作系统内核的...
禁用文字修饰跳过墨迹 恢复以前的Chrome版本63或更早版本的下划线行为。 Chrome 64默认实现墨水跳过! *新增*:“作为一项法律解决方案,Google删除了其流行的“查看图像”功能。该功能以前允许用户下载和保存照片,...
[INFO] Skipping 'EXE 安装程序' because of configuration error '找不到 InnoSetup 编译器 (iscc.exe)。' Advice to fix: 从 http://www.jrsoftware.org 下载 InnoSetup 5 或更高版本, 然后将其添加到 PATH。 ...
Skipping incremental backup." fi # 保存当前全备份为上一次备份 cp $BACKUP_DIR/full_backup_$(date +%Y-%m-%d).sql $BACKUP_DIR/full_backup_last.sql ``` 这个脚本可以在计划任务中定时运行,以保持数据库的...
log('ajaxSubmit: skipping submit process - no element selected'); return this; } var method, action, url, $form = this; if (typeof options == 'function') { options = { success: options }; } ...