gpt4 book ai didi

ruby-on-rails - 如何在 active_record 中禁用对模型中已更改属性的跟踪

转载 作者:行者123 更新时间:2023-12-04 06:00:03 26 4
gpt4 key购买 nike

我有一个具有 3 个属性的简单模型 idpaylod(二进制数据,大)、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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com