2014-09-21 2 views
0

ORM으로 Datamapper를 사용하여 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

레일스를 사용하는 경우 옵션이 있습니다. :-) –

답변

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 프로젝트 종류의 죽은 틱이 일 때문에 사용하고있는 버전입니다 상상. DM 1.2.1로이 테스트를하지만, 바로 그래서 당신은

+1

나는이 코드를 후크 안에 넣는 답을 보완 할 것이다. (어쩌면 저장 한 후에?) – lcguida

+1

@rockskull 정확히! 나는 예전에 저장하기 전에 사용했지만 저장 후에는 아마도 더 의미가 있습니다. – jonuts

+0

아하. 내일 아침에 테이에게 내버려 둬. –

관련 문제