網站想要開發「好友名單」功能時,會新增Table來記錄好友之間的關係,在Rails應該怎麼做呢?假設目前系統已經有User這個Model,我們將會建立 User has_many friends的關係來記錄每個User擁有的好友們。

首先新增一張Table來記錄Friendship(請善用Migration):

class AddFriendship < ActiveRecord::Migration
  def self.up
    create_table :friendships, :id => false do |t|
      t.column :user_id, :integer, :null => false
      t.column :friend_id, :integer, :null => false
    end
  end

  def self.down
    drop_table :friendships
  end
end

接下來在User Model中定義好友關係:

class User < ActiveRecord::Base
  has_and_belongs_to_many :friends,
    :class_name => "User",
    :join_table => "friendships",
    :association_foreign_key => "friend_id",
    :foreign_key => "user_id"
end

如此一來,你就可以用下列語法來建立使用者之間的好友關係:

u = User.create(:name => "deduce")
k = User.create(:name => "punk")
u.friends << k if not u.friends.include?(k)
# 如果 u 的好友不包含 k 則加入好友,不需要另外進行儲存的動作

u.friends 取得好友名單、u.friends.count 取得好友人數