如何解决通过导轨中的多对多关系破坏实体
我有3个模型。 故事,标签和标签。
一个故事通过标签具有许多标签。这是我的模特:
**Story.rb**
class Story < ApplicationRecor
has_many :taggings,dependent: :delete_all
has_many :tags,through: :taggings
end
**Tagging.rb**
class Tagging < ApplicationRecord
belongs_to :tag
belongs_to :story
end
**Tag.rb**
class Tag < ApplicationRecord
has_many :taggings
has_many :stories,through: :taggings
end
因此,当我删除一个故事时,我有一个依赖于::delete_all的标记,该标记在与一个故事相关联的所有标记上调用一个SQL删除语句。如果不再有与之关联的标签,我也想删除所有标签。例如,一个故事有1个标签和一个标签。当我删除该故事时,该故事和标签将被删除,但该标签仍然保留。我也希望删除该标签,因为不再有与此标签相关联的标签。
我已经尝试过了:
**Story.rb**
has_many :taggings,dependent: :destroy
has_many :tags,through: :taggings
这:
**Story.rb**
has_many :taggings,through: :taggings,dependent: :destroy
两者都不起作用。.有关如何处理此问题的任何建议?
解决方法
您可以使用after_destroy
class Tagging < ApplicationRecord
after_destroy :destroy_unused_tag
private
def destroy_unused_tag
tag.destroy if tag.taggings.empty?
end
end
,
您的Tagging
模型可能缺少标记的dependant
选项。
**Story.rb**
has_many :taggings,dependent: :destroy
has_many :tags,through: :taggings
**Tagging.rb**
belongs_to :story
belongs_to :tags,dependent: :destroy
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。