我有与HABTM关系相关的导轨模型Article
和User
。即,User
可以包含多篇文章,而Article
可以属于多个User
。
我很难删除记录。我的要求是:
Article
表中的文章以及Article
所有其他表格中的文章与has_many
关联相关联(我还有与ArticleLinks
模型相关联的其他模型,如ArticleMetaTags
,Article
等。Article
也与其他User
相关联,则不要完全删除该文章。只需删除User
和Article
关联。感谢您的时间和帮助。
答案 0 :(得分:0)
您始终可以在before_destroy
ArticleUser
(联接模型)的回调中实现它:
class ArticleUser
belongs_to :article
belongs_to :user
after_destroy do
article.destroy if article.article_users.empty?
end
end
您需要创建它,如果您没有,请将has_and_belongs_to_many
更改为has_many
class Article
has_many :article_users
has_many :users, through: :article_users
end
class User
has_many :article_users
has_many :articles, through: :article_users
end
这是更多的代码,但为您提供更多的灵活性。
但我建议在某个服务类中实现它,例如:
class ArticleUsers::Delete
attr_accessor :article_user
def initialize(article_user)
self.article_user = article_user
end
def destroy
if article_user.destroy
article_user.article.destroy
end
end
end
然后在ArticleUsers::Delete.new(article_user).destroy
作为预防措施,如果您没有任何明确的删除文章的逻辑,则可以在restrict_with_exception
类中将article_users
添加到Article
关联。如果存在任何关联记录,则会引发异常。
class Article
has_many :article_users, dependent: :restrict_with_exception
end