HABTM Self referential - only saves one way to join table

I'm completely stumped by this. Basically, I've got an HABTM self
referential model set up and for some reason the join table is only
saving relationships one way. To illustrate this:

member1 = Member.new
member2 = Member.new
member1.friends[0] = member2
member1.save
member2.friends[0] = member1
member2.save

Both saves return true in the console, but only the first actually is
written to the sqlite join table. I've tested a number of more in depth
examples, and in every case, I'm only able to get data saved in one
direction in the join table. For example:

member_id | friend_id
1 2
1 3
2 3
2 1 This won't save
3 2 This won't save either

In the console everything shows up correctly if I list .friends for any
object. But after restarting the console, only the uni-directional
entries remain.

Any help would be greatly appreciated! In my project I need to be able
to call .friends on any member and receive all members they are friends
with. Here's my code:

        # Member object
class CreateMembers < ActiveRecord::Migration
  def self.up
    create_table :members do |t|
      t.string :name
      t.timestamps
    end
  end

  def self.down
    drop_table :members
  end
end

      # Join table
class CreateMembersFriends < ActiveRecord::Migration
  def self.up
    create_table :members_friends, :id => false do |t|
      t.integer :member_id
      t.integer :friend_id
    end
  end

  def self.down
  end
end

      # Model
class Member < ActiveRecord::Base
  has_and_belongs_to_many :friends,
                          :class_name => "Member",
                          :join_table => "members_friends",
                          :foreign_key => "member_id",
                          :association_foreign_key => "friend_id"
end

Bob,

in HABTM are table names in alphabetical order, so your table name should be friends_members...

tom

Bob Mr. wrote:

Tom Z Meinlschmidt wrote:

Bob,

in HABTM are table names in alphabetical order, so your table name
should be friends_members...

tom

Bob Mr. wrote:

      t.integer :member_id
class Member < ActiveRecord::Base
  has_and_belongs_to_many :friends,
                          :class_name => "Member",
                          :join_table => "members_friends",
                          :foreign_key => "member_id",
                          :association_foreign_key => "friend_id"
end

Thanks Tom, but unfortunately that doesn't solve the problem. I need to
be able to get the friends of any member. Currently, the join table is
only saving it one way. So, for example with the join below, when I try
to get member2.friends, the result is nothing. If I try to get
member.friends, however, the result is [2, 3]. What I need is to be
able to call member2.friends and get the correct result of [1, 3]. Any
other ideas?

1 | 2
1 | 3
3 | 2