Mongoid se envía con .push en un habtm, que establece una relación habtm en ambas direcciones. Aunque delete #recuperá un registro asociado, no hay forma documentada de eliminar solo una relación que he visto. ¿Hay una mejor manera de hacer esto?HABTM mongoid following/follower
¿Existe alguna forma mejor de garantizar la singularidad?
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
Algunas cosas buenas aquí. Sin embargo, hice algunas pruebas antes, y caí en la misma trampa (a menos que esté equivocado): .delete (usuario) borra al usuario de la base de datos, y anula se refiere a cualquier referencia hecha al usuario ahora eliminado –
.delete está en el hash .following no en el objeto del usuario en sí. Al igual que doc, dice "Huérfano, una relación infantil única". Hace el trabajo, lo probé y funciona. – asaaki
El código '! Self.following.include? (User)' es genial cuando no tienes demasiados usuarios dentro de la siguiente relación, pero si tienes como 10K usuarios ... El rendimiento no es muy bueno:/ –