2011-07-08 31 views
0

我想創建用戶對話框用戶對話框數據庫方案

我該怎麼做?

創建SENDER_ID和recipient_id,然後一個記錄「選擇table_dialog *其中SENDER_ID = current.id或recipient_id = current.id」還增加2列deleted_by_sender和deleted_by_recipient

還是在數據庫中創建2記錄每個對話框

什麼是最佳解決方案?或者請提出您自己的解決方案

+0

你能清除你的問題嗎?你想要一個模式嗎? – vinceh

回答

1

如果通過「對話」您是指「兩個參與者之間的對話」,那麼它與經典郵箱非常相似。下面的代碼從我的一個實現類似功能的項目中提取(帶有縮寫)。也許會有所幫助。

class User < ActiveRecord::Base 
    # .... 
    has_many :received_messages, :class_name => "Message", :foreign_key => 'recipient_id' 
    has_many :sent_messages, :class_name => "Message", :foreign_key => 'sender_id' 
    # .... 
end 

class Message < ActiveRecord::Base 
    validates :content, :presence => true 
    validates :sender, :presence => true, :associated => true 
    validates :recipient, :presence => true, :associated => true 

    belongs_to :sender, :class_name => 'User', :foreign_key => 'sender_id' 
    belongs_to :recipient, :class_name => 'User', :foreign_key => 'recipient_id' 

    default_scope order('created_at desc') 

    # usage: user.received_messages.unread 
    scope :unread, where('unread = true') 

    def self.chat_between(first_user, second_user) 
    where('(recipient_id = ? AND sender_id = ?) OR (recipient_id = ? AND sender_id = ?)', 
      first_user.id, second_user.id, second_user.id, first_user.id) 
    end 

    def self.read_all! 
    self.update_all('unread = false') 
    end 

    def read! 
    self.update_attribute :unread, false 
    end 

    def new?(user) 
    (recipient == user) && (unread == true) 
    end 

end 
相關問題