依赖性:只有通过关联才能破坏到2度

时间:2018-05-23 07:44:18

标签: ruby-on-rails activerecord rails-activerecord polymorphic-associations

我有三个型号。 final String mimeType = "application/javafx-entrylist"; // TODO: choose properly // use existing format or introduce new one DataFormat f = DataFormat.lookupMimeType(mimeType); final DataFormat format = f == null ? new DataFormat(mimeType) : f; setOnDragDetected(event -> { Dragboard db = startDragAndDrop(TransferMode.ANY); ClipboardContent clipboardContent = new ClipboardContent(); clipboardContent.put(format, treeElement.getEntities()); db.setContent(clipboardContent); System.out.println(db.getContent(format)); event.consume(); }); setOnDragDropped(event -> { Dragboard db = event.getDragboard(); if (db.hasContent(format)) { System.out.println(db.getContent(format)); System.out.println("Accept Drop"); } event.consume(); }); 有许多collectionsearches。 当items被销毁时,我希望其collection被销毁,但items无效,因为它们仍然是有效的对象。 可以这样做吗?

以下是我的模特:

searches

1 个答案:

答案 0 :(得分:1)

可以删除这些项目,只需将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

来自the docs

  

collection.delete(object,...)

     

通过将其外键设置为NULL,从集合中删除一个或多个对象。如果对象与dependent: :destroy相关联,则会另外销毁,如果与dependent: :delete_all相关联,则会被删除。

     

如果使用:through选项,则默认情况下会删除(而不是取消)联接记录,但您可以指定dependent: :destroydependent: :nullify来覆盖此。