我正在寻找一种使用Rails从表中删除行的方法。除了我想要显示最近删除的项目时,行不应出现在任何正常的.find()
搜索中。我现在正在使用“活动”表来管理此类任务,这些任务最近存储了对行执行的class
,id
和method
。
有没有办法在没有实际将其从表中删除的情况下禁用行。有点像iTunes如何选中歌曲旁边的复选框?
答案 0 :(得分:4)
你看过acts_as_paranoid了吗?听起来应该满足你的需求。
答案 1 :(得分:3)
您可以在表格中创建deleted
列。当删除某些内容时,您只需执行DELETE FROM table WHERE blah = true
,而不是让删除功能发送UPDATE table SET deleted = true WHERE blah = true
语句。然后,当您正在寻找某些内容时,请始终将条件设置为包含deleted = false
(如果您要查找已删除的项目,则设置为true)。将返回任何未删除的内容,但您仍会保存有关已删除项目的信息。
答案 2 :(得分:0)
您可以将数据复制到“已删除的记录表”,但看起来像acts_as_paranoid或类似(也称为软删除)就是您想要的。
您是否可以添加包含普通查询的已删除条件为false的数据库索引?
什么样的查询是“行不应该出现在任何正常的.find()”中..哪个是你正在使用的?
斯蒂芬
答案 3 :(得分:0)
与上面的deleted
列类似,但您可以通过使用视图来避免轨道上的麻烦。
假设您有backing_table
,其中包含一列hidden
。然后,您可以使用CREATE VIEW view_table SELECT all_columns_but_hidden FROM backing_table WHERE hidden = false;
您的模型基于视图,不需要做任何特殊操作。您可以按UPDATE backing_table SET hidden = true WHERE conditions;