2014-10-20 1 views
1

price을 포함하는 Product이라는 레일 모델이 있습니다.레일 : 특정 서비스를 통해 모든 곳의 속성을 읽기 전용으로 만듭니다.

이제는 아무도 (내 팀의 개발자가) 예를 들어 제품 가격을 변경하기로 결정하지 않았습니다. ProductPriceManager이라는 서비스를 통해 가격을 항상 변경해야하기 때문에 product.update_attributes(price: 2300)입니다.

그래서 대신 다음과 같이하십시오 : ProductPriceManager.update_price(product, 2300). 그 이유는 제품이 바뀌면 다른 많은 일들이 일어나야한다는 것이며, 이것이 바로 ProductPriceManager이 처리하는 이유입니다.

이것을 구현하는 좋은 방법은 무엇입니까?

답변

0

업데이트 속성 이외의 다른 가격을 변경할 수있는 다른 방법이 있습니다.

제품 등급이 변경된 경우 ProductPriceManager을 호출하는 Product 클래스에서 콜백을 추가하기가 쉽지 않습니까?

뭔가 같은 :

class Product < ActiveRecord::Base 
    after_save ->(obj) { ProductPriceManager.price_changed(obj) }, if: ->(obj) { obj.price_changed? } 
end 

그리고 어떻게해야 price_changed method (이것은 단지 업데이트되었습니다로)

을 가격을 변경을 제외하고 단지 모든 작업이 무엇인지
관련 문제