【发布时间】:2019-09-16 20:09:33
【问题描述】:
我有一个功能,您可以将其他人添加为您的朋友,然后当他们成为您的朋友时,可以删除他们。
查看:
<a href="+user_friend_path(current_user,user)+" data-confirm='Do you want to remove #{user.profile.first_name} from your Friends?'></a>
用户模型:
has_many :friendships, dependent: :destroy
has_many :friends, through: :friendships
def remove_friend(friend)
self.friends.destroy(friend)
end
友谊模型
after_destroy :destroy_inverse_relationship
belongs_to :user
belongs_to :friend, class_name: 'User'
好友控制器
def destroy
item = current_user.remove_friend(@friend)
redirect_to user_path(@friend), notice: "#{@friend.profile.first_name} was removed from your friends"
end
路线:
resources :users do
resources :friends, only: [:index, :destroy]
end
工作原理:
1) 你会点击删除
2) 转到友谊控制器
3) 获取当前用户,并在 Users 模型上调用 remove_friend
4) 关系会破坏友谊
发生了什么:正在销毁和删除实际用户
应该发生什么:删除friendships 表中的行
【问题讨论】:
-
你为什么不直接删除友谊?
friendships.where(friend: friend).delete_all -
我有,但是在友谊中调用了“destroy_inverse_relationship”并删除了用户
-
destroy_inverse_relationship是做什么的?
标签: ruby-on-rails ruby postgresql ruby-on-rails-5