2013-05-09 46 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