Tàu giả với .push trên một hàng rào, đặt mối quan hệ habtm theo cả hai hướng. Mặc dù xóa sẽ xóa một bản ghi được liên kết nhưng không có cách nào được ghi lại để chỉ xóa mối quan hệ mà tôi đã thấy. Có cách nào tốt hơn để làm điều này?Theo dõi/theo dõi của HABTM theo dõi/theo dõi
Có cách nào tốt hơn để đảm bảo tính duy nhất không?
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
Một số nội dung tuyệt vời tại đây. Tuy nhiên, tôi đã làm một số thử nghiệm trước đó, và rơi vào cùng một cái bẫy (trừ khi tôi nhầm): .delete (người dùng) xóa người dùng khỏi cơ sở dữ liệu và vô hiệu hóa tham chiếu đến bất kỳ tham chiếu nào được thực hiện cho người dùng đã bị xóa –
.delete nằm trên băm .following không có trên chính đối tượng người dùng. Giống như doc nói "Orphan một mối quan hệ con duy nhất". Nó thực hiện công việc, tôi đã thử nghiệm nó và nó hoạt động. – asaaki
Mã '! Self.following.include? (Người dùng)' rất tuyệt khi bạn không có quá nhiều người dùng bên trong mối quan hệ sau đây, nhưng nếu bạn có 10K người dùng… Hiệu suất không tuyệt vời:/ –