2012-12-16 20 views
2

這不是一個正常的使用情況,我可以像使用paper_trail或其他插件......這是一個更復雜的方法來跟蹤更改......但讓我解釋一下:跟蹤醫生,客戶和約會的變化:)

讓我們假設你有一個預約的醫療日曆,負責醫生和客戶。

假設您是比爾,並且您負責計劃接下來幾周的時間安排。在確定了下個月的數百個預約後,您可以將時間表發送給您的醫生和客戶。

顯然,如果你方案四未來幾個星期內,會出現在你的原定計劃改變(切換醫生,因爲一個生病了,一個客戶端死了,你更改預約等的開始時間)

所以,您需要發送更新的時間表。但顯然你只想發送一封電子郵件給那些客戶或醫生,這些變化如何受到影響。

你需要搞清楚的是:

  • 新的約會呢?
  • 更改約會?
  • 取消預約?

起初看起來相當簡單,您可以記住上次發送計劃的時間戳,然後使用after_save,after_destroy回調跟蹤更改。

不幸的是,這也會導致一些棘手的情況,例如,你移除了一名醫生,並再次將同一位醫生添加到該預約中。你會得到2個顯然沒有「真正」變化的變化。

我喜歡的是獨立的桌子,我存儲這些變化,稍後再評論它們,並將它們發送給醫生和客戶。

我真的好奇,如果有人做了類似的事情,或有一個很好的方法如何解決這個問題。 :)

謝謝!

+1

需要注意的是醫生和工作人員除了那些參與計劃的事件需要知道其他醫生的安排,對於各種各樣的原因。另外,如果「不變」事件隨着時間的推移而發生*變化:如果我被告知沒有預約,我可能會重新安排一些事情;如果它再次發生變化,即使它很快發生變化,也會產生影響。 –

+0

是的,絕對。如果我提交新的時間表,我可以通過刪除(或標記爲「發送」)記錄的更改來解決此問題。所以,如果我刪除醫生髮送更新(=>乾淨的'變化'的歷史),並再次添加醫生它會有2個變化。如果我在一個循環中執行此操作(刪除並添加),則不值得發送。再次,真棒測試用例! – fluxsaas

+0

如果這是一個真正的問題,不要假設它要求我們承擔一些事情。調度系統很複雜,並且有很多邊緣/拐角的情況;因此,沒有簡單的答案或好的方法。 –

回答

1

觀察狀態變化的最簡單方法非常簡單:使用日誌文件。在你的情況下,它將是一個類固醇,一個模型,具有如下屬性的日誌文件:user_to_update,date_changed,notified_ok

每次進行更改並從日誌模型檢索統計信息時,都可以觸發新的日誌插入。

+0

是的,我想這是我必須解決的方案。我想我必須添加valid_change之類的方法嗎?和cleanup_log刪除/清理更改,如果一個新的變化進入,使舊的無效......我可以在這裏看到一些不錯的測試用例:) – fluxsaas

+0

你是完全正確的關於cleanup_log。一個有趣的統計數據是一次約會會發生多少變化(可能會導致一些管理瓶頸)。無論如何,日誌是您的案例中的解決方案之一。 –

+0

不錯,沒想過。我甚至可以找出哪個醫生/客戶是最可靠的。我會爲了以後的發佈而記住這一點! – fluxsaas