Rails假删除一行

时间:2009-12-11 20:59:27

标签: mysql ruby-on-rails ruby activerecord

我正在寻找一种使用Rails从表中删除行的方法。除了我想要显示最近删除的项目时,行不应出现在任何正常的.find()搜索中。我现在正在使用“活动”表来管理此类任务,这些任务最近存储了对行执行的classidmethod

有没有办法在没有实际将其从表中删除的情况下禁用行。有点像iTunes如何选中歌曲旁边的复选框?

4 个答案:

答案 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;

隐藏内容