さて、なんか関連付けが少し理解出来たようだし、

FriendモデルとUserモデルを、ちょっと解りやすく書き直しましょうか。
Rails開発日記さんには申し訳ないけどwwww


まず、Friendモデル。まるっと貼っちゃいましょう。その方が解り易いよね?
app/models/friend.rb

class Friend < ActiveRecord::Base
  belongs_to :asked_to,   :foreign_key => :was_invited_user_id,
                                :class_name => "User"
  belongs_to :was_invited_from, :foreign_key => :asked_user_id,
                                :class_name => "User"

  def self.friendships(user)
    friends = user.asked_friends & user.was_invited_friends
  end
end

相互に友達だと認識している友達を見るメソッド名も、変更したよ:-)


んで、Userモデル。こっちは、diffで;-)
app/models/user.rb

-  has_many :friend_ships,       :foreign_key => 'my_id',
-                                :class_name => 'Friend',
-                                :dependent => :destroy
-  has_many :befriend_ships,     :foreign_key => 'friend_id',
-                                :class_name =>'Friend',
-                                :dependent => :destroy
-  has_many :friends,            :through => :friend_ships,
-                                :source => :friend_shipped
-  has_many :be_friends,         :through => :befriend_ships,
-                                :source => :befriend_shipped
+  has_many :asked,                :foreign_key => 'asked_user_id',
+                                  :class_name => 'Friend',
+                                  :dependent => :destroy
+  has_many :was_invited,          :foreign_key => 'was_invited_user_id',
+                                  :class_name =>'Friend',
+                                  :dependent => :destroy
+  has_many :asked_friends,        :through => :asked,
+                                  :source => :asked_to
+  has_many :was_invited_friends,  :through => :was_invited,
+                                  :source => :was_invited_from


んで、Friend.friendshipsメソッドを使っているコントローラ、書き換える。
app/controllers/user/friends_controller.rb

-    @friends = Friend.own_friends(current_user)
+    @friends = Friend.friendships(current_user)


んで、マイグレーションも書き換えた。
db/migrate/*数字*_create_friends.rb

     create_table :friends do |t|
-      t.column "my_id",        :integer,  :null => "false"
-      t.column "friend_id",    :integer,  :null => "false"
+      t.column "asked_user_id",        :integer,  :null => "false"
+      t.column "was_invited_user_id",    :integer,  :null => "false"
       t.timestamps


じゃあ、テストも書き直しましょうか。
まず、フィクスチャ。diffだとややこしそうだから、まるっと貼る。

# Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html
quentin_has_friend_ship_to_aaron:
  asked_user_id: 1
  was_invited_user_id: 2
aaron_has_friend_ship_to_admin:
  asked_user_id: 2
  was_invited_user_id: 4
admin_has_friend_ship_to_aaron:
  asked_user_id: 4
  was_invited_user_id: 2


んで、Friendモデルのテスト。これもdiffだと見にくいから、全部貼ろう。
test/unit/friend_test.rb

require File.dirname(__FILE__) + '/../test_helper'

class FriendTest < ActiveSupport::TestCase

  test "should user has asked to friends" do
    user = users(:quentin)
    assert_equal(user.asked_friends.count, 1)
  end

  test "should user has was invited from friends" do
    user = users(:aaron)
    assert_equal(user.was_invited_friends.count, 2)
  end

  test "should user has friendships" do
    user = users(:aaron)
    friendships = Friend.friendships(user)
    assert_equal(friendships.count, 1)
  end
end


ああ、そうそう。
どうでもイイけど、


英語とか、かなりいい加減だからwwwwww


そんな感じで:-)