记录已删除的项目

时间:2009-11-19 03:28:05

标签: ruby-on-rails activerecord

您好我有一个处理销售的rails应用程序,现在,我需要的是能够删除销售以保持会计清晰,但记录在其他地方,该记录的详细信息。

我想我可能需要创建一个记录器,但不知道如何,或者可能是另一个对象在破坏销售时被创建。

提前致谢

4 个答案:

答案 0 :(得分:3)

只是一个想法 - 您可以在当前表中添加一列作为“已删除”标志的列(我总是将其称为逻辑删除)。然后,您可以添加一个默认范围来过滤掉“已删除”的记录,并在需要时添加一些包含“已删除”记录的命名范围。

答案 1 :(得分:1)

acts as paranoid是一个可以为你处理这个问题的插件,但如果你有任何关于它的事情,你不喜欢你可以像Andy建议的那样推出你自己的版本,也许有一个deleted_at时间戳。您可能会尝试覆盖模型上的销毁操作 - 我自己没有尝试过,但这样的事情应该有效:

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

答案 2 :(得分:0)

就像你说的那样,你可以创建另一个对象/模型,你可以在每次删除Sale时创建一个新实例。将其命名为SaleRecord或SaleHistory ......就像那样。然后你可以检索这些记录并做任何事情。然后,一个不错的用例是查找特定产品的销售记录,以计算其受欢迎程度的统计数据......

答案 3 :(得分: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