rails模型的影子表

Posted

技术标签:

【中文标题】rails模型的影子表【英文标题】:Shadow table for rails model 【发布时间】:2013-02-04 03:51:21 【问题描述】:

我的 Rails 应用程序中有关注模型,当用户关注某些内容时 - 创建记录,取消关注 - 删除记录。

我需要在单独的表中跟踪此更改(仅限插入和删除)。

它将用于使用普通 SQL 构建一些报告 - 这就是为什么表应该具有类似的结构,即“影子”

我不想用额外的逻辑玷污原始模型 - 有一些解决方案,但不够灵活:

https://github.com/rubiety/has_draft - 我无法选择具体操作

https://github.com/bglusman/ruby-shadow-tables - 仅限原始和 mysql

有人知道这种情况的一些好的解决方案吗?

【问题讨论】:

试试github.com/airblade/paper_trail 它序列化数据并将所有内容放到一个表中我需要单独的表 【参考方案1】:

您可以再创建一张表 shadow_follows 并有一个回调方法 after_create 和 before_destroy 将目标记录复制到新表中。

【讨论】:

是的,我想就是这样,但它看起来像是可以委托给 gem 的功能 rubygems.org/gems/audited gem 在那里,但它不会创建表的副本;尽管您可以指定可以审计哪些所有表。【参考方案2】:

我没有为这种情况找到任何合适的 gem,并决定使用 rails 观察者来实现它。没什么特别的......只是最简单的解决方案。

【讨论】:

【参考方案3】:

这是相当古老的,但如果其他人想做这样的事情,我和一个朋友做了一个脚本,用 DB 触发器在 Rails 中设置影子表...https://github.com/bglusman/ruby-shadow-tables

这有点笨拙,并且肯定会从被抽象为 gem 中受益,也许是一个 DB 中立的解决方案。

【讨论】:

以上是关于rails模型的影子表的主要内容,如果未能解决你的问题,请参考以下文章

SQL 为值更改的列保存影子表

从影子表到原始表的 SQLite Rtree 映射 id(s)

CSharpGL(48)用ShadowVolume画模型的影子

我只想在我的表的电子邮件列更新时制作一个表审计/影子表

Tensorflow中的滑动平均模型

关于Unity中植物树木烘焙后没有影子的解决方法