我在rails中有一个联接表,其中有一些条目需要删除。
假设联接表名为"products_variations"
我发现这个联接表中有几个条目是不久前错误创建的。我有他们的ID,所以我可以在phpmyadmin中删除他们,但我想进行迁移,以防有人使用旧数据库(以前也发生过)。
由于我没有一个ruby对象来表示这个联接表,所以我不能做这样的事情:
ProductsVariants.find(id_array)
如何在rails迁移中删除这些条目?
您可以在迁移过程中为该表创建AR类,并将其用于删除记录。
您将如何从控制台进行操作?不管是什么,把它放在迁移中。例如
class Cleanup < ActiveRecord::Migration
def up
execute("delete from product_variants where id in (1,2,3)")
end
def down
end
end
除非有像maxd的答案这样的解决方案,否则您也可以通过普通的'ol SQL删除它们。如果你已经有了id列表,你可以这样做:
ActiveRecord::Base.connection.execute("DELETE FROM products_variants WHERE id IN (...)")
其中,...
是要删除的ID的列表。
半无意义的补充说明:从技术上讲,由于各种原因,数据操作通常不会在迁移中完成;其中之一是,您通常不一定保证所有(甚至任何)迁移都将由您的同事运行(在这里说得很笼统),或者在新的本地项目设置的情况下(也就是说,您刚刚删除了项目代码,并且是第一次在本地设置它)。
虽然在您的场景中,这听起来不是一个问题,但如果您想以Rails-y的方式进行此操作,一种选择是将其放入Rake任务中,这样您或其他人就可以根据需要执行它,而不是依赖迁移。