我有一个Note模型,带有note_type字段。如果类型为“short_note”,如何编写将从数据库中删除Note记录的迁移?
答案 0 :(得分:4)
代码本身很简单。
Note.delete_all :type => 'short_note'
(如果注释具有销毁回调,则需要运行destroy_all
。它速度较慢,因为它们是逐个删除的,但有时可以产生更好的数据完整性。)
但是,我想你比向上迁移更担心下行迁移。它本质上是一种不可逆转的转变。该问题的特定部分的答案是您的迁移应该引发ActiveRecord::IrreversibleMigration
异常。
但是,无论何时编写不可逆转的迁移,重要的是要考虑为什么要这样做。根据您的具体情况,在部署到生产环境时在控制台中运行该特定命令可能比在应用程序的定义中进行迁移更合适。
答案 1 :(得分:0)
def self.up
execute "DELETE FROM notes WHERE note_type = 'short_note'"
end
: - P
开玩笑吧。我相信你能做到这一点:Note.delete_all :note_type => 'short_note'
答案 2 :(得分:0)
在self.up中:
Note.delete_all("type = 'short_note'");
或使用destroy_all来调用记录的destroy方法和回调(before_destroy和after_destroy):
Note.destroy_all("type = 'short_note'");