我正在使用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
如何在模态中找到旧值?
我有一个想法,用自定义类抽象所有模态。这将使这种操作成为可能。但是想知道它是否会不必要地增加复杂性。
提前致谢。
答案 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项目现在已经死了,但你应该知道)