我有2種型號Rails的哪一部分應該照顧更新鏈接模型狀態?
- ShippingClass,它定義了一個運輸票價和目的地到航運票價適用
- 店,其中有一個狀態機,確定了一系列行動,允許與否
一家店has_many shipping_classes。用戶可以添加或刪除貨運類,以及其他因素,至少有一個shipping_class存在或不存在對商店狀態有影響的事實。
底線是,任何時候航運類被添加/刪除/修改我在商店模型上運行update_state方法來保持狀態是最新的。這種方法基本上檢查有多少shipping_classes與商店相關聯並相應地調整商店狀態(例如,如果至少有一個shipping_class被分配,則簡化商店狀態是活動的,否則是不活動的)
我是想知道從控制器更新店鋪狀態是否是好的做法。實際上,我正在評估讓ShippingClass在保存和銷燬時更新商店的機會。雖然這可能更具有錯誤性,但我不需要記住每次保存ShippingClass時更新Shop模型,但它會增加模型的耦合度。
使用回調來做到這一點似乎不是一種選擇。這些被封裝到事務中。 因此,在交易完成之前,父模型(Shop)並沒有完全看到關聯模型(ShippingClasses)的狀態。
編輯 另一種選擇,如下所述,是將模型更新放入觀察者。這樣做的好處是它不包含在交易中,所以Shop模型應該能夠檢查相關的ShippingClasses。缺點是沒有包裝到事務中,所以如果更新商店模型失敗將會使商店狀態異步。然而,這會比將更新放入控制器更好,因爲它將永久完成一次。
另一個選項可以覆蓋ShippingClass的保存和銷燬方法,並從那裏更新商店模型。
什麼是最佳實踐,爲什麼?
在此先感謝
你知道嗎http://api.rubyonrails.org/classes/ActiveRecord/Observer.html –