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模型的影子表的主要内容,如果未能解决你的问题,请参考以下文章
从影子表到原始表的 SQLite Rtree 映射 id(s)