2012-09-21 175 views
0

我有兩個ActiveRecord模型,CartItem和OrderItem。雖然CartItem是動態的,並且包含與各種其他模型的關聯,但OrderItem是靜態的並且表示過去的狀態。兩者有一些共同的屬性,一些屬性不同,一些是另一些的功能。 OrderItems總是隻能從CartItems創建,所以在邏輯上看來我應該通過將CartItem傳遞給構造函數來構造一個OrderItem。我知道我可以構造一個空的OrderItem,然後使用一個單獨的方法從CartItem中設置它的屬性,但這似乎與這個概念不一致。什麼是適當的方式來做到這一點?如何從另一個ActiveRecord模型構建一個ActiveRecord模型?

回答

0

Overloading initialize constructor中建議的那樣,您可以使用散列作爲參數來定義OrderItem初始化方法,然後在散列內傳遞所需的CartItems屬性以創建OrderItem。

+0

當您說「在散列中傳遞需要的CartItems屬性」時,是否意味着CartItems類需要知道OrderItems認爲哪些屬性相關?這看起來不是很好的封裝。我會認爲只是傳遞CartItem會是合適的,但它不適用於使用單獨方法的相同代碼。它告訴我 'NoMethodError(當你沒有想到它的時候你有一個零對象! 你可能預期了一個ActiveRecord :: Base實例 評估nil.delete時發生錯誤):' 但是我不' t調用刪除,我沒有看到任何零對象。 – RussK