モンゴイドは、habtmに.pushを付けて出荷され、両方向にhabtm関係を設定します。 deleteは#関連するレコードを削除しますが、私が見た関係のみを削除する方法はありません。これを行うより良い方法はありますか?HABTM mongoidフォロー/フォロワー
一意性を保証する良い方法はありますか?
has_and_belongs_to_many :following, {class_name: 'User', inverse_of: :followers, inverse_class_name: 'User'}
has_and_belongs_to_many :followers, {class_name: 'User', inverse_of: :following, inverse_class_name: 'User'}
def follow!(user)
self.following.push(user) # this pushes the inverse as well
self.following_ids.uniq!
self.save!
user.follower_ids.uniq!
user.save!
end
def unfollow!(user)
self.following.delete(user.id)
self.save!
user.followers.delete(self.id)
user.save!
end
ここには素晴らしいものがあります。しかし、私は以前にいくつかのテストを行い、誤っていない限り、同じトラップに落ちました:.delete(user)はデータベースからユーザを削除し、nullifyは現在削除されたユーザに対して行われた参照を指します。 –
.deleteはユーザーオブジェクト自体ではなく、.followingハッシュ上にあります。 docのように "単一の子関係を孤立させる"と言います。それは仕事をして、私はそれをテストし、それは動作します。 – asaaki
'!self.following.include?(user)'というコードは、以下の関係の中にあまりユーザーがいないのに、10Kユーザーのようになっている人には涼しいです.../ –