6
Oct

網站想要開發「好友名單」功能時,會新增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取得好友人數

Category : Ruby on Rails學習筆記

4 Responses to “Rails: 建立好友名單”


頭兒 October 28, 2007

您好! 你的這篇好友對我效益極大
正在為了好友名單頭痛
我的想法比較笨一點…
藉由button的方式 取得params[:id]的值
還有 session[:user_id] 取得目前使用者的id
分別 存入 user_id 及 friend_id
但由於會有重覆的加入的情況發生…
正在苦悶著要怎麼定義… 重覆加入好友的情況...
一開始是想到…
freind.find(:all :conditions=> "user_id = ■ and friend_id = ▲")
版主應該懂我在打什麼@@
就是想確認目前freindship有沒有已加入的情況…
無奈 這個 這個敘述句 怎麼寫就是寫不好…
害系統一直判斷失敗@@
懇請版主可以指導指導@@

頭兒 November 4, 2007

你好! 最近我在建置一個… 也是類似於加入好友 只是想破頭一直弄不好
所以想詢問版主的一些看法…

一個旅遊行程 有多個 用戶參與!
我先建立了旅遊行程這個table名:travel, id、descripion、..........
又建立了一個參與名單:joinlist 仿效你的方式
****************
Create_table :joinlists, :id => false do |t| t.column :travel_id, :integer, :null => false t.column :joinner_id, :integer, :null => false
end
****************
接下來我是否應該在travel的model 裡打上 (或是其他model?)
class Travel “Travel , ← 這裡是該打這樣嗎?
:join_table => “joinlists”,
:association_foreign_key => “joinner_id”,
:foreign_key => “travel_id”end

只是我照這方式 試著去做… 他無法判讀出… u.█ ← (他不知道這是啥)
不知版主有何見解^^? 又再次麻煩你嚕



Spam protection by WP Captcha-Free