rails中脏数据的使用

在启用了脏数据(dirty objects)后,有时候一些不通过writer的修改是不会存到数据库里的。

比如以下代码:

self.org_common_flag[COMMON_FLAGS[:agent_flag]]= self.agent_flag ? "0" : "1"


实际上已经修改了字符串中某个字符了,但是因为不通过writer的调用,dirty的标记还是没变。查看:

[quote]
>> u.org_common_flag_changed?
=> false
[/quote]

一定要强制加一个will_change!,就会标志已修改。


self.org_common_flag_will_change!
self.org_common_flag[COMMON_FLAGS[:agent_flag]]= self.agent_flag ? "0" : "1"


查看一下:
[quote]
>> u.org_common_flag_changed?
=> true
[/quote]

脏数据减少了大量的无关数据 update,也带来了一些不方便,这就要求更好的测试覆盖。
调试的时候注意使用 _changed? , _change 的方法来检查是否触发脏数据。并且观察日志里的sql输出和检查数据库内容。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值