【问题标题】:RAILS Check which attribute of a model has changedRAILS 检查模型的哪个属性发生了变化
【发布时间】:2014-11-06 12:14:15
【问题描述】:

我知道要检查模型是否已更改,可以使用:

instance.changed?

还要检查一个属性是否发生了变化:

instance.attr_changed?

但是我们如何确定哪个属性发生了变化?有没有一种方法可以让我们一个一个地遍历所有属性,并以某种方式确定哪个属性发生了变化?

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    你可以很容易地使用:

    instance.changed_attributes
    

    instance.changed
    

    第一个会给你哈希{"attribute" => "value before change"}

    第二个返回更改的属性名称数组:["name of changed attribute"]

    【讨论】:

    • 嗯...令人惊讶的是,instance.changed?返回 true,而 instance.changed 不打印任何内容。有什么想法吗?
    • 这很有趣。也许您正在使用一些覆盖某些 AR 功能的 gem?当您查看文档时:api.rubyonrails.org/classes/ActiveModel/…,您可以看到 changedchanged_attributes.present?changed?changed_attributes.keyschanged_attributes@changed_attributes ||= ... 的实现。因此 - 除非你真的不可能改变 AR 的行为。
    • 是的,确实被覆盖了。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-06
    • 1970-01-01
    • 1970-01-01
    • 2013-12-23
    • 1970-01-01
    • 2016-12-03
    • 2020-10-05
    相关资源
    最近更新 更多