Как удалить несколько записей с зависимыми записями в ActiveRecord - PullRequest
5 голосов
/ 09 февраля 2012
create table foo (id, name, order, ...);
create table foo_bar (id, foo_id, name, value);

foo содержит столбец заказа со значениями как (1,2,3,4,5, ... 10) при условии, что foo_bar содержит несколько записей для каждого foo.

Как удалить foos со значениями порядка 3..6 и зависимые от нее записи?

Ответы [ 2 ]

13 голосов
/ 09 февраля 2012
class Foo < ActiveRecord::Base
  has_many :foo_bars,  :dependent => :destroy
end

class FooBar < ActiveRecord::Base
  belongs_to  :foo
end

Если ваше отношение такое, как указано выше, следующий код будет работать

Foo.delete_all(["id in (?)", [3,4,5,6]])

ИЛИ просто

Foo.delete([3,4,5,6])

Ref удалить

EDITED

Из небольшого я знаю ваш вопрос, я думаю, у вас есть что-то вроде следующего

foo table

id  some_column    order
1   some_value      3
2   some_value      4
3   some_value      3
4   some_value      2
5   some_value      1
6   some_value      5
7   some_value      6

foo_bar table

id  some_column    foo_id
1   some_value      2
2   some_value      1
3   some_value      3
4   some_value      2
5   some_value      4
6   some_value      5
7   some_value      6

Тогда пользовательследующий order вместо id

Foo.delete_all(["order in (?)", [3,4,5,6]])
1 голос
/ 09 июля 2016

Правильный ответ, чтобы уничтожить (удалить) зависимости:

Как сказал @Salil, если ваша модель имеет dependent callback, например:

has_many :foo_bars,  :dependent => :destroy

Ваш запрос на уничтожениеродительские и зависимые записи должны быть:

Foo.where(order: [1, 2, 3, 4]).destroy_all

Метод where получит все записи с массивом orders и вызовет метод destroy для каждой найденной записи.

ПРОСТО ИСПОЛЬЗУЙТЕ delete или delete_all, если вы не хотите выполнять обратные вызовы об уничтожении зависимостей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...