Rails 4:如何通过迁移删除联接表条目



我在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任务中,这样您或其他人就可以根据需要执行它,而不是依赖迁移。

相关内容

  • 没有找到相关文章

最新更新