2011-06-03 132 views
0

我有Transaction對象組合在一個Cart對象中。一些Transaction物體belong_toProducts和其他belong_toServices。我想在將它們添加到購物車時結合類似的Transactions(即用新的價格和數量信息更新現有記錄)。在軌道中合併記錄3

這裏是我現在有(未經測試):

def update_cart 
    if current_cart.transactions.find(:conditions => [service_id = self.service_id]) 
    @utransaction = current_cart.transaction.find(:conditions => [service_id = self.service_id]) 
    @utransaction.price = @utransaction.price + self.price 
    @utransaction.save 
    elsif current_cart.transactions.find(:conditions => [product_id = self.product_id]) 
    @utransaction = current_cart.transactions.find(:conditions => [product_id = self.product_id]) 
    @utransaction.price = @utransaction.price + self.price 
    @utransaction.quantity = @utransaction.quantity + self.quantity 
    @utransaction.save 
    else 
    nil 
    end 
end 

不過,我覺得這是非常龐大的,有可能是這樣做的更好的方法。那麼,在我進一步討論之前,是否有以這種方式更新現有對象的內置或更好的方法?

謝謝!

+0

因此,交易可以屬於產品或屬於服務? – ardavis 2011-06-03 14:51:36

+0

是的,這是正確的。而產品和服務併入STI的原因是因爲他們的領域太過不同,可能會隨着時間的推移而發生很大的變化。不過,我現在計劃將它們組合成一個多態關聯(如下面的ardavis所建議的),這應該簡化一下。但是,那麼問題是,在我的例子中,這段代碼的其餘部分是否是最好的方法? – Justin 2011-06-03 15:05:34

回答

1

假設您的交易可以屬於某個產品或屬於某個服務,那麼它聽起來像多態關聯是您最好的選擇,並且可能會讓您的現有問題變得更加簡單。

查看Railscast on Polymorphic Associations

我認爲你會喜歡它並且學到很多東西。

+0

會的,我現在就看,看看!謝謝! – Justin 2011-06-03 14:53:39

+0

好的,我剛剛查看了這段視頻,肯定認爲多態關聯是要走的路(我最初並沒有做的事情,現在就會實現,謝謝,+1!)。但是,這是如何影響上面的代碼呢?我仍然需要檢查它是產品還是服務,然後以相同的方式更新這些變量,對吧? – Justin 2011-06-03 15:10:02

+0

我將不得不讓別人給一個去,:)很高興我可以幫助一些雖然。 – ardavis 2011-06-03 15:12:38