Mongoid wysyła z .push na habtm, który ustanawia związek habtm w obu kierunkach. Chociaż usuń # usunie powiązany rekord, nie ma udokumentowanego sposobu usunięcia tylko relacji, którą widziałem. Czy jest lepszy sposób na zrobienie tego?HABTM mongoid follow/follower
Czy istnieje lepszy sposób na zapewnienie wyjątkowości?
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
Kilka świetnych rzeczy tutaj. Jednak wcześniej przeprowadziłem testy i wpadłem w tę samą pułapkę (chyba że się mylę): .delete (użytkownik) usuwa użytkownika z bazy danych, a unieważnienie odnosi się do wszelkich odniesień do usuniętego użytkownika. –
.delete jest na mieszanie .fh, nie na samym obiekcie użytkownika. Tak jak doktor mówi: "Sierota to relacja jednego dziecka". Wykonuje to zadanie, testowałem i działa. – asaaki
Kod '! Self.following.include? (User)' jest fajny, gdy nie masz zbyt wielu użytkowników w poniższym związku, ale jeśli masz 10 000 użytkowników ... Wydajność nie jest zbyt duża:/ –