2013-05-09 48 views
0

所以我有这样一行:红宝石检测某列的值发生了变化

if self.company_changed? 

它工作正常,但这种检测,如果该公司已在对象上发生变化。我需要知道数据库值是否已更改,而不是内存中的值是否已更改。所以,我想这一点:

if :company_changed? 

这似乎在调试模式下工作时,我只执行一条线。如果让它运行,它会在无限循环测试中失败。

我的问题是可以在ruby中使用什么来检查列值是否实际发生了变化。

+0

你的问题很不清楚。什么是专栏?你使用的是MySQL的宝石?你正在使用Rails或其他? 'if:ads'永远是真的。请考虑你的问题,并从头开始解释。 – fotanus 2013-05-09 14:43:24

+0

我很困惑。 (你可以显示'company_changed?'的方法吗?是基于ROR的,然后标记为'ROR' – 2013-05-09 14:43:26

+0

这是一个ROR方法,列是公司,company_changed?是由活动记录产生 – joncodo 2013-05-09 14:44:59

回答

2

我很确定你实际上在谈论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