あなたは常にArticleUser
ためbefore_destroy
コールバックで(参加モデル)それを実装することができます:あなたは1を持っていない場合は、それを作成し、変更する必要が
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
私は結合テーブルのモデルを持っていません。 CreateJoinTableArticleUserを使用して作成しました。私は結合テーブルのモデルを作成することをお勧めしますか?それはhas_manyではないでしょうか?その場合の関係を通して? –
さて、article_usersのモデルを作成する必要があります。 'Article'は' ArticleUser'をたくさん持ち、article_usersを通して多くの 'User'を持っています。ユーザーにとっても同じです。私は私の答えを更新します。 –
そして、私が上記のように、私はArticle has_many ArticleLink関連の記事に関連するArticleLinkモデルも持っています。記事を削除すると、記事に関連するすべてのArticleLinkが削除されますか?これをどのように実装すればよいですか?そして、あなたの時間に感謝します。 –