我正在軌道4上創建一個簡單的聊天應用程序。控制器,模型和視圖已創建,但功能仍不完整。我在我的數據庫中有兩個表格,會話和消息。會話表包含兩個字段,發件人ID和收件人ID。消息表包含3個字段,正文,用戶標識和讀取(默認爲0,表示不讀取)。未讀消息計數器
型號:
class Conversation < ActiveRecord::Base
belongs_to :sender, :foreign_key => :sender_id, :class_name => "User"
belongs_to :reciever, :foreign_key => :reciever_id, :class_name => "User"
has_many :messages, :dependent => :destroy
validates_uniqueness_of :sender_id, :scope => :reciever_id
scope :involving, lambda { |user_id|
where("sender_id = ? OR reciever_id = ?", user_id, user_id)
}
scope :between, lambda { |sender_id, reciever_id|
where("(sender_id = ? AND reciever_id = ?) OR (sender_id = ? AND reciever_id = ?)", sender_id, reciever_id, reciever_id, sender_id)
}
def other_interlocutor(user_id)
if sender.id == user_id
return reciever.id
else
return sender.id
end
end
end
class Message < ActiveRecord::Base
belongs_to :conversation
belongs_to :user
validates_presence_of :conversation_id, :user_id, :body
end
我所要做的就是創建接收未讀郵件的實時功能計數,每當有人收到新的消息。我正在使用私人酒吧來創建用戶之間的聊天。
我有一個包含此功能的用戶模式:
def unread_messages_count
unread_messages = 0
# puts "Putting self conversations ! #{self.conversations.first}"
conversations = Conversation.involving(self.id)
conversations.each do |conversation|
unread_messages += conversation.messages.where(:read => 0, :user_id => conversation.other_interlocutor(self.id)).count
end
return unread_messages = unread_messages == 0 ? nil : unread_messages
end
我有一個頁面,所有用戶的通話列和一個對話被點擊所有與該對話的信息都被列出了。在同一頁上,我訂閱了每個conversation_messages_path
爲每個對話創建單獨的頻道。每當一個消息被髮送一個create.js.erb
文件呈現在我發佈這些訂閱的頻道:
<% publish_to conversation_messages_path(@conversation.id) do %>
$("#conversations_link").text("<%= current_user.unread_messages_count %> Conversations");
$("#messages").append("<%= escape_javascript render(:partial => 'message', :locals => { :message => @message })%>");
<% end %>
的$("#conversation_link")
是我想要顯示的未讀郵件數。
當前,未讀郵件數正在返回錯誤計數,並且導航欄僅在conversation.sender_id
消息接收方更新。
我的未讀消息計數器未返回正確數量的未讀消息。我不知道如何解決它。我的代碼有什麼問題? 謝謝。
「我的代碼出了什麼問題,我應該怎麼做才能使這件事情起作用?」作爲一個問題陳述,這個陳述非常模糊和不具描述性。與其傾倒大量的大量代碼,不如試圖將問題孤立於可以切實解決的問題上? – MarsAtomic
@MarsAtomic所有代碼都是必需的,以便了解我的應用中發生了什麼。 –