您好我有一个处理销售的rails应用程序,现在,我需要的是能够删除销售以保持会计清晰,但记录在其他地方,该记录的详细信息。
我想我可能需要创建一个记录器,但不知道如何,或者可能是另一个对象在破坏销售时被创建。
提前致谢
答案 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