我有 2 个模型
- ShippingClass,定义运费和运费适用的目的地
- 商店,它有一个状态机来确定是否允许一些操作
一家商店有_many shipping_classes。用户可以添加或删除运输类别,除其他因素外,至少存在或不存在一个运输类别这一事实对商店状态有影响。
最重要的是,每当添加/删除/修改运输类时,我都会在商店模型上运行 update_state 方法以使状态保持最新。这个方法所做的基本上是检查有多少 shipping_classes 与商店相关联并相应地调整商店状态(例如,为了简化商店状态,如果分配了至少 1 个 shipping_class,则为活动状态,否则为非活动状态)
我想知道从控制器更新商店状态是否是一种好习惯。事实上,我正在评估让 ShippingClass 在保存和销毁时更新商店的机会。虽然这可能更加防错,因为我不需要记住每次保存 ShippingClass 时都更新 Shop 模型,但是它增加了模型的耦合。
使用回调来执行此操作似乎不是一种选择。这些被包装到事务中。因此,在事务完成之前,父模型(Shop)并不能确切地看到关联模型(ShippingClasses)的状态。
编辑另一个选项,如下所述,是将模型更新放入观察者。这样做的好处是它没有被包装到事务中,因此 Shop 模型应该能够检查关联的 ShippingClasses。缺点是没有包装到事务中,因此更新 Shop 模型失败会使 Shop 状态不同步。然而,这比将更新放入控制器要好,因为它将永远完成一次。
另一个选项可以覆盖 ShippingClass 的 save 和 destroy 方法并从那里更新 Shop 模型。
最佳做法是什么,为什么?
提前致谢