长时间读者第一次发布海报。
我最近开始在轨道上使用红宝石,所以我对环境仍然很陌生(尽管我已经完成了一些指南)所以请温柔。
我想要做的是创建一种用户可以随时访问的另一个表的存档表(通过网站上的其他链接)。
例如,如果我有"用户"表,我希望能够存档旧用户,但仍然可以让某人去查看它们。 基本上,它必须从初始表中删除用户,并将他/她的信息保存到archived_users表中。
感谢您的时间。
答案 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)
我认为我的评论更多的是答案,所以在此发布并添加更多信息
在这种情况下,如果“活动”标志添加到用户表格中,您可以根据需要随意打开或关闭。这样您就不必担心处理另一个模型类,并且可以重用所有相同的视图和控制器结构。在您的视图中,您可以简单地“隐藏”任何非活动用户(如果登录用户是管理员等,则可能只显示非活动用户)。
您还可以自由地包含其他元数据,例如“停用”(时间戳)。
简而言之,如果您关注性能,通过适当的索引(以及必要时进行分区),您不应该真正需要创建单独的归档表。
我能想到这样做的唯一原因是,如果你正在处理数十亿的记录,和/或以疯狂的数量增长(这可能不是你的情况)。