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

标签 ruby-on-rails ruby-on-rails-4 activerecord rails-activerecord jrubyonrails

我有一个具有 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/

相关文章:

ruby-on-rails - RoR - 为什么这个 ID 不起作用?

ruby-on-rails - Active Record - Where IN 有多列

使用 Ruby on Rails Active Record 的 SQL 多表嵌套组

ruby-on-rails - Rails ActiveRecord 关系

javascript - 在 Rails 应用程序中加载自定义 javascript 文件

ruby-on-rails - Rails的特定于环境的初始化器?

ruby-on-rails - 在 ruby​​ 中获取 oauth2 access_token 所有者电子邮件地址?

css - 捕获网页的快照

ruby - Rails 4 是否有从数组 "Apples, Bananas and Pears"、 ["Apples"、 "Bananas"] 生成 "Pears"的辅助方法?

javascript - 预编译 Assets 失败。推送被拒绝,无法编译 Ruby 应用程序