有没有办法看到我的属性设置何时?

时间:2015-07-14 21:37:17

标签: ruby-on-rails postgresql

如果没有向我的数据库添加更多列并进行一些回调,在我的对象上最初设置属性时,是否有任何方法(rails-y或其他方式)?

2 个答案:

答案 0 :(得分:0)

是,覆盖setter方法attribute=并使用write_attribute设置其值。这应该属于rails-y类别:

class MyModel < ActiveRecord::Base
  def attribute_to_override=(value)
    Rails.logger.debug { "attribute_to_override changes to: #{value}." }
    write_attribute(:attribute_to_override, value)
  end
end

答案 1 :(得分:0)

Postgres 会保留一些列级统计信息,在ANALYZE完成或自动分析发生时更新。其中包括最常见值直方图边界等内容。

但是,这些是针对所有行的整个列。如果您想获得有关单个行的列的信息,您需要向表中添加其他行,或者创建另一个表(或多个)来存储其他信息,并且在任何一种情况下都需要更新相应的跟踪信息。

这些类型的审计跟踪可以通过使用触发器功能在某种程度上自动化,以检查要更改的内容,以及您感兴趣的其中一个列已更改,您可以自动更新时间戳(如果在表中内联)或在审计表中插入一行。

但是,您看起来没有内置任何内容。

如果你只是为一个或几个属性寻找这个,那么在表中添加内联列并更新它(在插入/更新中,或通过触发函数),可能是你最好的选择。 / p>

如果您正在寻找更具系统性的内容,即您希望了解一堆表中所有列的内容,那么通过触发器函数实现更全面的审计系统< / em>并存储在单独的表中可能是更好的选择。