如果通過「對話」您是指「兩個參與者之間的對話」,那麼它與經典郵箱非常相似。下面的代碼從我的一個實現類似功能的項目中提取(帶有縮寫)。也許會有所幫助。
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
你能清除你的問題嗎?你想要一個模式嗎? – vinceh