Ruby on rails Rails:通过特定的服务将属性设置为只读
我有一个名为Ruby on rails Rails:通过特定的服务将属性设置为只读,ruby-on-rails,activemodel,Ruby On Rails,Activemodel,我有一个名为Product的rails模型,它包含属性price 现在,我不想确定,没有人(我团队中的开发人员)决定只通过执行例如product.update\u attributes(price:2300)之类的操作来更改产品的价格,因为价格应该始终通过名为ProductPriceManager的服务进行更改 因此,您应该执行如下操作:ProductPriceManager.update\u price(product,2300)。原因是,当产品发生变化时,会发生很多其他事情,而这正是Prod
Product
的rails模型,它包含属性price
现在,我不想确定,没有人(我团队中的开发人员)决定只通过执行例如product.update\u attributes(price:2300)
之类的操作来更改产品的价格,因为价格应该始终通过名为ProductPriceManager
的服务进行更改
因此,您应该执行如下操作:ProductPriceManager.update\u price(product,2300)
。原因是,当产品发生变化时,会发生很多其他事情,而这正是ProductPriceManager
所要处理的
实现这一点的好方法是什么?除了使用更新属性之外,还有其他可能更改价格 如果产品价格发生变化,在产品类中添加一个调用
ProductPriceManager
的回调不是更容易吗
比如:
class Product < ActiveRecord::Base
after_save ->(obj) { ProductPriceManager.price_changed(obj) }, if: ->(obj) { obj.price_changed? }
end
类产品(obj){ProductPriceManager.price\u changed(obj)}后,如果:->(obj){obj.price\u changed?}
结束
而price\u changed方法
应该做的只是更改价格以外的所有操作(因为它刚刚更新)