所以我有这样一行:红宝石检测某列的值发生了变化
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
你的问题很不清楚。什么是专栏?你使用的是MySQL的宝石?你正在使用Rails或其他? 'if:ads'永远是真的。请考虑你的问题,并从头开始解释。 – fotanus 2013-05-09 14:43:24
我很困惑。 (你可以显示'company_changed?'的方法吗?是基于ROR的,然后标记为'ROR' – 2013-05-09 14:43:26
这是一个ROR方法,列是公司,company_changed?是由活动记录产生 – joncodo 2013-05-09 14:44:59