Зависимый: уничтожить только до 2-й степени, у многих через ассоциацию - PullRequest
0 голосов
/ 23 мая 2018

У меня три модели.A collection имеет много от searches до items.Когда collection уничтожается, я бы хотел, чтобы его items было уничтожено, но searches было бы аннулировано, поскольку они все еще являются действительными объектами самостоятельно.Можно ли это сделать?

Вот мои модели:

class Collection < ApplicationRecord
  has_many :searches, through: :items
  has_many :items
  has_many :searches, through: :suggestions
  has_many :suggestions
end

class Item < ApplicationRecord
  belongs_to :collection
  belongs_to :search
end

class Search < ApplicationRecord
  has_many :collections, through: :items
  has_many :items
  has_many :collections, through: :suggestions
  has_many :suggestions
end

1 Ответ

0 голосов
/ 23 мая 2018

Вы можете просто удалить элементы, просто добавьте dependent: :destroy к has_many :items.

class Collection < ApplicationRecord
  has_many :searches, through: :items
  has_many :items, dependent: :destroy
end

После уничтожения коллекции, элемент уничтожается, но поиск продолжается.

второе решение

Вы можете даже применить dependent: :nullify к has_many :searches - получить тот же результат.

class Collection < ApplicationRecord
  has_many :searches, through: :items, dependent: :nullify
  has_many :items
end

От документы :

collection.delete (object,…)

Удаляет один или несколько объектов из коллекции, установив для их внешних ключей значение NULL.Объекты будут дополнительно уничтожены, если они связаны с dependent: :destroy, и удалены, если они связаны с dependent: :delete_all.

Если используется опция :through, то записи о соединении удаляются (вместо нуля) по умолчанию, но вы можете указать dependent: :destroy или dependent: :nullify, чтобы переопределить это.

...