2012-01-06 41 views
2

我需要的是一個Factory.define塊內部的方法,以知道是否使用create或build來調用工廠,顯式地或簡單地使用默認策略。工廠女孩:創建vs構建,需要不同的行爲

我有一個工廠,必須手動調整代碼的原作者遠離軌道,正常創建barfs和正常生成可以管理的關聯。我不想在構建案例中調整這些關聯,但我必須在創建案例中。

我一直在尋找是否有類似'current_strategy'的東西,但我還沒有看到任何東西。我知道我可以使用after_create和after_build來區分,但是原作者是這樣做的,以便在不進行調整的情況下保存對象的行爲會導致巨大的不快 - 將異常和垃圾保存在數據庫中。

我目前沒有權限修復他寫的「模型」,現有的rspec測試使用差異化來隨時做正確的事情。在任何情況下,以前的測試作者都選擇不使用create,這意味着設置大部分測試數據是一個神祕而漫長的過程。

任何幫助深表感謝 - 我仍然行使我的GoogleFu但很想成爲短路......

哦,這是在梁2(/哭)

的感謝!

回答

1

這聽起來確實是一個非常奇怪的問題,但既然你說你正在清理別人的代碼,我會認爲沒有簡單的辦法。

我不會從工廠方面來解決這個問題。工廠不應該關心,因爲模型(而不是工廠)應該是對象結構和關聯方面有效性的守護者。

我會寫規範是分開createbuild對象,並測試他們的協會,以確保它們是正確的(根據你想要的新的行爲最終定)。然後,通過重構模型來完成這些規範,以完成您實際需要它們執行的操作。這就是如何清理遺留代碼並改變它的行爲 - 編寫在新功能正確時將通過的測試,並在通過之前重構,並在每次測試/重構時進行增量更改。

當您的新規格通過時,您就很順利。如果前面的作者提供了自己的驗證以前行爲的規格,那麼你必須弄清楚哪些測試(如果有的話)當前是有效的(其中很多可能是有效的,因爲它們代表該應用程序目前正在實現),並刪除那些不是。

+0

絕對是最好的方法。我的挑戰在於,模型的組織方式是,雖然他們有聯繫,但在特定的中心創建新的聯繫並不起作用。你必須把這個東西稱爲create_standard和new_standard,它把所有東西都建立起來並粘合在一起。此外,儘管他有關聯,但他通過手動將幾個相關對象的每個ID設置爲相同的值來將模型鏈接在一起。他有一個他寫的允許他設置ID的本土插件。他做得太多了...... – jaydel 2012-01-06 16:53:03

+0

這些都是最初用Rails編寫的,或者是從另一個代碼庫(我試圖讓一些瘋狂的東西變得有意義)轉換成的?聽起來像一場噩夢。希望它不是一個明確的混淆嘗試(從長遠來看,這對真正的好處是沒有益處)。 – jefflunt 2012-01-06 18:00:08

+0

有沒有希望得到*爲什麼它以這種方式實現的原因,以便以更有用的方式重構它?你是從頭開始的,還是這是你熟悉的整體設計決策的代碼基礎? – jefflunt 2012-01-06 18:02:10