2009-11-19 199 views
1

您好,我有一個處理銷售的Rails應用程序,現在我需要的是能夠刪除銷售以保持清算,但在其他地方記錄該記錄的詳細信息。保留已刪除項目的記錄

我想我可能需要創建一個記錄器,但不知道如何,或者可能是另一個對象被創造銷燬破壞。

在此先感謝

回答

0

我結束了創建一個delete_sale對象,然後在我的銷售觀察者我創建並填充並在銷燬之前的銷售數據。

@delsale = DeletedSale.create 


    @last_deleted_sale = DeletedSale.find(:last) 

    ActiveRecord::Base.connection.execute "UPDATE deleted_sales SET name = #{@venta.id} WHERE id = #{@last_deleted_sale.id};" 


    @delsale.update_attributes :cliente => @venta.cliente.name 
    @delsale.update_attributes :vendedor => @venta.vendedor.name 

    @delsale.update_attributes :instalador => @venta.instalador.name 
    @delsale.update_attributes :precio_de_venta => @venta.precio_de_venta 
    @delsale.update_attributes :precio_de_instalacion => @venta.precio_de_instalacion 
     if @venta.producto_id? 
    @delsale.update_attributes :producto_id => @venta.producto_id 
    end 
    if @venta.cart_id? 
    @delsale.update_attributes :cart_id => @venta.cart_id 
    end 
3

只是一個想法 - 你可以列添加到您當前的表將作爲「已刪除」標誌(我一直叫這個邏輯刪除)。然後,您可以添加一個默認範圍以過濾掉「已刪除」記錄,並添加一些命名範圍,以便在需要時包含「已刪除」記錄。

+0

這將是我將明確應該早些時候在開發中嘗試的東西,作爲一個銷售應用程序,我已經構建了一堆代碼來獲取報告等。這會讓我像60%的應用程序一樣重寫,只是將標記過濾爲已刪除的記錄。謝謝。 – 2009-11-19 04:25:00

1

acts as paranoid是一個可以處理這個問題的插件,但是如果有任何關於它的東西,你不喜歡你可以像Andy提出的那樣推出自己的版本,也許使用deleted_at時間戳。你可以嘗試覆蓋模型上的破壞行動 - 我還沒有嘗試過自己,但這樣的事情應該工作:

class Sale < ActiveRecord::Base 
    def destroy 
    update_attributes(:deleted_at => Time.now) 
    end 
end 
0

就像你說的,你可以創建你創建一個新的實例另一個對象/模型每次銷售被刪除。將其命名爲SaleRecord或SaleHistory ...就像那樣。然後你可以檢索這些記錄並做任何事情。然後,一個不錯的用例是查找銷售記錄特定產品來計算統計它是如何流行的是......

+0

我最終這樣做了,讓我們看看它是如何擴展的,而且我有很多報道,包括品牌中銷售最多的產品和最暢銷的產品。不知道如何得到如何受歡迎。但是,感謝兄弟,我最終做到了這一點,並創建了一個名爲deleted_sales的模型 – 2009-11-19 07:21:22

相關問題