逆の関係を実装できるので、UserAがUserBを追加すると、BのプロファイルにUserAが表示され、その逆も同様です。しかし、UserAがUserBを追加した場合、UserBにUserAを友達として削除させる方法がわかりません。私はさまざまな方法を試しましたが、何かを変更するたびに問題が別の場所に移動します。基本的な問題が次のとおりかどうかはわかりません。
- a。FriendshipsControllerdestroyメソッドの定義方法
- b。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