在更新对象之前保留其版本

时间:2019-02-20 15:19:44

标签: ruby-on-rails

我想在更新对象之前保留其版本。

例如:

这是有关创建的文章:

#<Article:0x007fc32af4c910
 id:1,
 title: "Guitar",
 price: 300,
 buying_price: 50,
 created_at: Sun, 17 Feb 2019 14:39:21 UTC +00:00,
 updated_at: Sun, 17 Feb 2019 14:39:21 UTC +00:00,
 >

这是文章的更新:

#<Article:0x007fc32af4c910
 id:1,
 title: "Guitar",
 price: 300,
 buying_price: 35,
 created_at: Sun, 17 Feb 2019 14:39:21 UTC +00:00,
 updated_at: Mon, 18 Feb 2019 14:39:21 UTC +00:00,
 >

这是文章的另一种更新:

#<Article:0x007fc32af4c910
 id:1,
 title: "Guitar",
 price: 380,
 buying_price: 45
 created_at: Sun,17 Feb 2019 14:39:21 UTC +00:00,
 updated_at: Wed, 20 Feb 2019 14:39:21 UTC +00:00,
 >

查看价格已更改,但我希望能够在会计表中将其全部报告:

日期|采购价格|价格

  • 2月17日| 50 | 300 |

  • 2月18日| 35 | 300 |

  • 2月20日| 45 | 380 |

对不起,我不知道如何在此处创建降价表格

1 个答案:

答案 0 :(得分:2)

  1. 会计表是一个数据库表

    您可以使用previous_changes来检测更改内容,并在回调中更新会计表。

    类文章      after_save:log_to_accounting_table

     private 
    
     def log_to_accounting_table
       p previous_changes
       Accounting.create(....)
     end
    

    结束

    与您的问题无关:我正在使用audited来跟踪更改。

  2. 会计表是一个Excel(OP真正想要的)

    您将需要一个表来存储所有这些更改,即所谓的“旧版本”。 audited将为您提供帮助。然后,您要做的就是将数据从audits表导出到csv。 Check this out了解如何导出到excel。