所以我有这条线:
if self.company_changed?
它工作正常,但这会检测公司是否在对象上发生了变化。我需要知道数据库值是否已更改,而不是内存中的值是否已更改。所以我尝试了这个:
if :company_changed?
当我只执行一行时,这似乎在调试模式下工作。如果我让它运行,它将无法在无限循环上进行测试。
我的问题是可以在 ruby 中使用什么来检查列值是否实际发生了变化。
所以我有这条线:
if self.company_changed?
它工作正常,但这会检测公司是否在对象上发生了变化。我需要知道数据库值是否已更改,而不是内存中的值是否已更改。所以我尝试了这个:
if :company_changed?
当我只执行一行时,这似乎在调试模式下工作。如果我让它运行,它将无法在无限循环上进行测试。
我的问题是可以在 ruby 中使用什么来检查列值是否实际发生了变化。
我很确定您实际上是在谈论 ActiveRecord。在这种情况下,您需要重新获取记录以查看数据库中的值是否已更改。
self.class.find(self.id).company != self.company
一个通用的方法可能是这样的:
def attr_changed_in_db?(attr)
self.class.find(self.id).attributes[attr] != self.attributes[attr]
end
伟大的 Ryan Bates 对此进行了精彩的截屏视频。