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

Посредством многих повторений тестирования я просто заметил, что моя объединяющая таблица, которая представляет отношения HABTM между двумя моделями, не удаляет записи, когда экземпляры этих моделей удалены. Я должен сделать что-то специальное при удалении экземпляра модели, которая имеет отношения HABTM?

6
задан JJD 1 February 2013 в 17:25
поделиться

2 ответа

При ближайшем рассмотрении отношения HABTM должны удалять записи в таблице соединений. Однако ни отношения HABTM, ни отношения, которые я описал в исходной версии (см. Историю сообщений) этого решения, не удаляют эти записи таблицы соединений, когда вы удаляете запись с помощью метода delete . ActiveRecord :: Base # delete не вызывает никаких обратных вызовов, таких как те, которые устанавливаются отношениями HABTM для удаления потерянных записей из таблицы соединения. Вместо этого вы должны использовать ActiveRecord :: Base # destroy .

Вам придется использовать необработанный SQL для удаления ненужных записей. Если вы решили создать модель соединения, вы можете перебирать записи в модели соединения, удаляя те, у которых нет связи.

Пример:

class Foo < ActiveRecord::Base
  has_many :foo_bars, :dependent => :destroy
  has_many :bars, :through => :foo_bars
end

class FooBar < ActiveRecord::Base
  belongs_to :foo
  belongs_to :bar
end

class Bar < ActiveRecord::Base
  has_many :foo_bars, :dependent => :destroy
  has_many :foos, :through => :foo_bars
end

FooBar.all.each{|fb| fb.destroy? if fb.foo.nil? || fb.bar.nil? }
7
ответ дан 17 December 2019 в 00:10
поделиться

Записи в объединенной таблице должны удаляться без каких-либо дополнительных действий. Вы можете добавить в свой код параметр : delete_sql , чтобы изменить поведение, если у вас возникнет странная ситуация. Удаление объекта на другой стороне соединения не является поведением по умолчанию.

0
ответ дан 17 December 2019 в 00:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: