2015-03-02 2 views
-1

У меня есть таблица соединений в рельсах, у которой есть несколько записей, которые нужно удалить.Rails 4: Как удалить записи таблицы соединений через миграцию?

позволяет сказать, что таблица присоединиться называется «» products_variants

я узнал, у меня есть несколько записей в этой таблице присоединиться, которые были созданы ошибочно некоторое время назад. У меня есть их идентификаторы, поэтому я могу пойти в phpmyadmin и удалить их, но я хочу сделать миграцию, чтобы сделать это, если кто-то использует более старую базу данных (что было раньше).

Поскольку у меня нет объекта рубина, представляющего этой таблицы соединения я не могу сделать что-то вроде:

ProductsVariants.find(id_array) 

Как бы я идти об удалении этих записей в миграции рельсов?

+0

Почему вы хотите удалить записи перед отбрасыванием таблицы? –

+0

Я не хочу удалять таблицу. Я просто хочу удалить несколько записей, которых не должно быть – Zyren

+0

Итак, в этом случае вы можете создать модель ActiveRecord внутри своей миграции, как я описал ниже. И используйте его для использования чистой таблицы методом 'delete_all' –

ответ

0

Как вы это сделаете с консоли? Что бы это ни было, поставьте его в миграцию. Например,

class Cleanup < ActiveRecord::Migration 
    def up 
    execute("delete from product_variants where id in (1,2,3)") 
    end 
    def down 
    end 
end 
+0

Жаль, что я имел в виду phpmyadmin, а не консоль. Я редактировал вопрос – Zyren

0

Вы можете создать класс AR для этой таблицы внутри миграции и использовать ее для удаления записи.

0

Запрет решения, такого как ответ maxd, вы также можете удалить их с помощью простого 'ol SQL. Если у вас уже есть список идентификаторов, вы можете сделать что-то вроде этого:

ActiveRecord::Base.connection.execute("DELETE FROM products_variants WHERE id IN (...)") 

Где ... список идентификаторов для удаления.

Бесполезная сторона примечания: технически манипуляции с данными обычно не выполняются в миграциях по разным причинам; один из них заключается в том, что вам обычно не обязательно гарантировано, что все (или даже любые) миграции будут выполняться вашими коллегами (говорящими здесь в целом), или в случае новых локальных проектов (то есть вы только что вытащили вниз по коду проекта и устанавливайте его локально в первый раз).

Хотя это не похоже на то, что это проблема в вашем сценарии, если вы хотите сделать это способом Rails-y, одним из вариантов было бы поставить это в задачу Rake, чтобы вы или другие могли выполнить при необходимости, вместо того, чтобы полагаться на миграцию.

Смежные вопросы