如果没有向我的数据库添加更多列并进行一些回调,在我的对象上最初设置属性时,是否有任何方法(rails-y或其他方式)?
答案 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>并存储在单独的表中可能是更好的选择。