"档案"铁轨上的一张桌子

时间:2014-03-18 23:52:49

标签: ruby-on-rails ruby archive

长时间读者第一次发布海报。

我最近开始在轨道上使用红宝石,所以我对环境仍然很陌生(尽管我已经完成了一些指南)所以请温柔。

我想要做的是创建一种用户可以随时访问的另一个表的存档表(通过网站上的其他链接)。

例如,如果我有"用户"表,我希望能够存档旧用户,但仍然可以让某人去查看它们。 基本上,它必须从初始表中删除用户,并将他/她的信息保存到archived_users表中。

感谢您的时间。

3 个答案:

答案 0 :(得分:1)

执行此操作的最佳方法可能是在原始Users表中添加名为deleted。然后,您可以在正常情况下过滤掉旧用户(最好使用default scope),但允许在需要时查看/查询旧用户。

答案 1 :(得分:1)

Papertrail可能适合您。

它创建一个“版本”表,并为包含has_paper_trail的任何类记录创建/更新/销毁事件。例如:

class User < ActiveRecord::Base
  has_paper_trail
end

deleted_users = Papertrail::Version.where(item_type: User, event: "destroy")

deleted_users.last.reify.name # assuming the users table has a 'name' column

答案 2 :(得分:1)

我认为我的评论更多的是答案,所以在此发布并添加更多信息

在这种情况下,如果“活动”标志添加到用户表格中,您可以根据需要随意打开或关闭。这样您就不必担心处理另一个模型类,并且可以重用所有相同的视图和控制器结构。在您的视图中,您可以简单地“隐藏”任何非活动用户(如果登录用户是管理员等,则可能只显示非活动用户)。

您还可以自由地包含其他元数据,例如“停用”(时间戳)。

简而言之,如果您关注性能,通过适当的索引(以及必要时进行分区),您不应该真正需要创建单独的归档表。

我能想到这样做的唯一原因是,如果你正在处理数十亿的记录,和/或以疯狂的数量增长(这可能不是你的情况)。