我可以实现反向关系,所以如果 UserA 添加了 UserB,那么它会在 B 的配置文件中显示 UserA,反之亦然。但是,如果 UserA 添加了 UserB,我无法弄清楚如何让 UserB 将 UserA 作为朋友删除。我尝试了很多不同的方法,但是每次我更改某些内容时,都会将问题转移到其他地方!我不知道根本问题是否是:
- 一种。FriendshipsControllerdestroy方法是如何定义的
- 湾。我是否需要另一个控制器来专门处理 InverseFriendships 破坏
- C。如果我需要自定义路线
- d。如果以上所有内容都可以,但是我在视图中的代码(特别是 _suggested_connections 部分)正在调用错误的控制器和/或路由
- e. 或以上都不是。
下面的代码片段:
class FriendshipsController < ApplicationController
def destroy
@friendship = current_user.friendships.find(params[:id])
@friendship.destroy
flash[:notice] = "Removed friendship."
redirect_to current_user
end
在视图中
<% @user.inverse_friends.each do |inverse_friendship| %>
<li>
<%= inverse_friendship.name %>
<%= link_to "remove", @user.inverse_friendships, :method => :delete, :class => "btn-small btn-danger" %><br />
<%= image_tag inverse_friendship.avatar(:thumb) %>
我的模型:
class Friendship < ActiveRecord::Base
belongs_to :user
belongs_to :friend, class_name: 'User'
attr_accessible :friend_id, :user_id
end
class User < ActiveRecord::Base
has_many :friendships, dependent: :destroy
has_many :friends, through: :friendships
has_many :inverse_friendships, dependent: :destroy, class_name: "Friendship", foreign_key: "friend_id"
has_many :inverse_friends, through: :inverse_friendships, source: :user
和路线:
resources :friendships
authenticated :user do
root :to => 'home#index'
end
root :to => "home#index"
devise_for :users, :controllers => { :registrations => :registrations }
resources :users