Mongoid隨身攜帶.push,在兩個方向上建立了一種雙方的關係。儘管刪除將刪除關聯的記錄,但沒有文檔記載的方法來刪除我已經看到的關係。有沒有更好的方法來做到這一點?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指的是對現在刪除的用戶的任何引用。 – 2011-12-21 23:15:09
The .delete不在用戶對象本身上。像醫生說的「孤兒獨子關係」。它完成了這項工作,我測試了它併發揮作用。 – asaaki 2011-12-22 02:44:32
當您在以下關係中沒有太多用戶時,代碼'!self.following.include?(user)'很酷,但是如果您擁有10K用戶......性能不是很好:/ – 2012-01-05 17:45:24