Ruby on rails 如何编写将从数据库中删除某些记录的迁移?

Ruby on rails 如何编写将从数据库中删除某些记录的迁移?,ruby-on-rails,migration,Ruby On Rails,Migration,我有一个便笺模型,带有一个便笺类型字段。如果类型为“short\u Note”,如何编写从数据库中删除Note记录的迁移 :-p 只是开玩笑。我相信你可以做到: Note.delete_all :note_type => 'short_note' 在self.up中: Note.delete_all("type = 'short_note'"); 或者使用destroy\u all调用记录的destroy方法和回调(destroy之前和之后): 代码本身很简单 Note.delete_

我有一个便笺模型,带有一个便笺类型字段。如果类型为“short\u Note”,如何编写从数据库中删除Note记录的迁移

:-p

只是开玩笑。我相信你可以做到:

Note.delete_all :note_type => 'short_note'
在self.up中:

Note.delete_all("type = 'short_note'");
或者使用destroy\u all调用记录的destroy方法和回调(destroy之前和之后):


代码本身很简单

Note.delete_all :type => 'short_note'
(如果notes具有destroy回调,则需要运行
destroy\u all
。速度较慢,因为它们会被逐个删除,但有时会产生更好的数据完整性。)

然而,我想你更担心向下迁移而不是向上迁移。这本质上是一种不可逆转的转变。这个问题的答案是,您的迁移应该引发一个
ActiveRecord::不可逆转迁移
异常


然而,每当你写一个不可逆的迁移,重要的是要考虑你为什么要这么做。根据您的情况,在部署到生产环境时,在控制台中运行该特定命令可能比将迁移作为应用程序定义的一部分更合适。

我非常喜欢在可能的情况下使用哈希和/或数组形式,并且只在必须直接编写SQL时才使用字符串形式。这样,没有人会试图将它重构成一个可以接受SQL注入的表单,以防他们想要删除一个参数化类型<代码>“type=NULL”否,不要指定
:条件
键!
delete\u all
方法只接受条件,而不是一般的
find
spec。
Note.destroy_all("type = 'short_note'");
Note.delete_all :type => 'short_note'