保存前将新字段值与旧字段进行比较

时间:2014-09-21 11:02:52

标签: ruby datamapper

我正在使用Datamapper构建一个Ruby Sinatra应用程序作为ORM。我遇到了一个问题,我找不到合适的解决方案,并且想到了StackOverflow的解决方案。

我需要将字段的旧值与用户输入的新值进行比较,以进行小额计算。

例如

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

如何在模态中找到旧值?

我有一个想法,用自定义类抽象所有模态。这将使这种操作成为可能。但是想知道它是否会不必要地增加复杂性。

提前致谢。

1 个答案:

答案 0 :(得分:1)

您可以通过model.original_attributes提取旧值。这样的事情应该适合你的情况:

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

您应该能够将它放在保存挂钩之前并从那里运行计算和通知。

HTH:)

(顺便说一下,我用DM 1.2.1对它进行了测试。我想这也是你正在使用的版本,因为DM项目现在已经死了,但你应该知道)