我有一个具有 3 个属性的简单模型 id
、paylod
(二进制数据,大)、created_at
。
我需要从负载数据中提取一堆值以进行进一步处理,这是我在 after_initialize
回调方法中所做的。由于有效负载可能非常大(~20MB),我想在提取必要信息后通过设置 @payload = nil
来处理这些数据,以防止在加载一堆条目时出现内存不足的情况.
注意:该模型仅从数据库中读取,无需保留任何更改。
class Payload < ActiveRecord::Base
after_initialize do |data|
# extract required values from binary data
# ...
# dispose big data
error.payload = nil
# at this point error.changed_attributes['payload']
# contains the previous payload data (~20MB)
end
end
如何防止在 @changed_attributes
哈希中保留先前值的模型?
最佳答案
如果属性 setter 方法被重载而没有调用super()
,所有回调将被禁用并且不会跟踪任何更改。
def payload= ( new_payload )
@payload = new_payload
end
在这个使用只读模型的用例中,它工作正常。请注意,该模型也未标记为脏,并且可能会出现其他副作用。
关于ruby-on-rails - 如何在 active_record 中禁用对模型中已更改属性的跟踪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33656589/