gpt4 book ai didi

ruby-on-rails - ActiveRecord:如何设置模型的 "changed"属性?

转载 作者:太空宇宙 更新时间:2023-11-03 18:20:41 25 4
gpt4 key购买 nike

对于 ActiveRecord 中的每个模型,似乎都有一个名为“已更改”的私有(private)属性,它是一个数组,列出了自从您从数据库中检索记录以来已更改的所有字段。

例子:

a = Article.find(1)
a.shares = 10
a.url = "TEST"

a.changed ["shares", "url"]

有没有办法自己设置这个“改变的”属性?我知道这听起来很老套/笨拙,但我正在做一些非常不寻常的事情,即使用 Redis 来缓存/检索对象。

最佳答案

ActiveModel::Dirty#changed 返回 @changed_attributes 散列的键,它本身返回属性名称及其原始值:

a = Article.find(1)
a.shares = 10
a.url = "TEST"

a.changed #=> ["shares", "url"]
a.changed_attributes #=> {"shares" => 9, "url" => "BEFORE_TEST"}

由于没有setter方法changed_attributes=,可以强行设置实例变量:

a.instance_variable_set(:@changed_attributes, {"foo" => "bar"})
a.changed #=> ["foo"]

关于ruby-on-rails - ActiveRecord:如何设置模型的 "changed"属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18950280/

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