2014-09-21 56 views
0

我正在構建一個Datamapper作爲ORM的Ruby Sinatra應用程序。我遇到了一個問題,我無法找到一個體面的解決方案,並認爲要打StackOverflow解決方案。比較新的字段值與舊的保存

我需要比較一個字段的舊值和用戶輸入的新值來做一個小計算。

例如

car = Listing.all(type: :car).first 
car.price # 200 
car.price = 100 
car.save # ~> discount = (200 - 100/200) * 100 ~= 50% - alert watchers 

我如何找到模式中的舊值?

我有一個想法來抽象所有的模態與自定義類。這將使這種操作成爲可能。但不知道這會不必要地增加複雜性。

在此先感謝。

+1

如果您正在使用Rails ..有一個選項。 :-) – 2014-09-21 11:17:32

回答

1

您可以通過model.original_attributes取出舊值。像這樣的東西應該爲你的情況下工作:

car = Listing.all(type: :car).first 
car.price = 100 
old_price = car.original_attributes[Listing.properties[:price]] # => 200 

你應該能夠把在保存前鉤並運行你的計算和通知從那裏。

HTH :)

(BTW我用DM 1.2.1測試這一點。我想這是你正在使用以及由於DM項目是那種死十歲上下這幾天的版本,但只是讓你應該知道)

+1

我會補充你的回答,把這個代碼放在一個鉤子裏(保存後也許?) – lcguida 2014-09-21 15:10:21

+1

@rockskull到底!我之前使用保存在我的例子中,但保存後可能更有意義 – jonuts 2014-09-21 15:11:56

+0

啊看起來不錯。明天早上讓我說說它。 – 2014-09-21 18:21:59